Asp.net mvc 4 将数据从视图传递到控制器方法

Asp.net mvc 4 将数据从视图传递到控制器方法,asp.net-mvc-4,Asp.net Mvc 4,我需要在控制器中的方法中使用当前视图的名称 在我的视图中,我可以使用下面的代码获取名称 我想把这个@ViewData[“pageName”]传递给我的MakeChange操作结果 在我的控制器里。每次我通过MakeChange方法,我得到的都是 是否“对象引用未设置为对象的实例” 如何将数据从视图传递到控制器方法 @ViewData["pageName"] = @Path.GetFileName(Server.MapPath(VirtualPath))

我需要在控制器中的方法中使用当前视图的名称 在我的视图中,我可以使用下面的代码获取名称

我想把这个@ViewData[“pageName”]传递给我的MakeChange操作结果 在我的控制器里。每次我通过MakeChange方法,我得到的都是 是否“对象引用未设置为对象的实例”

如何将数据从视图传递到控制器方法

            @ViewData["pageName"] =  @Path.GetFileName(Server.MapPath(VirtualPath))


             public ActionResult MakeChange(string lang)
                    {
                        string getPageName = ViewData["pageName"].ToString();

                        return RedirectToAction(getPageName, "Home");
                    }

不能使用ViewData将数据从视图传递到控制器。可以使用ViewData将数据从控制器传递到视图

要实现您的目标,您可以执行以下操作:

<input type='hidden' name='lang' value='@Path.GetFileName(Server.MapPath(VirtualPath))' />

<input type='submit' value='send'>

Ps:您应该将输入放入表单标记中。

Path.GetFileName(Server.MapPath(VirtualPath))
将为您提供带有扩展名的razor视图名称(例如:
index.cshtml
)。由于RedirectAction方法正在查找操作方法名称,因此不能将其与
RedirectToAction
方法一起使用。在使用文件扩展名部分之前,需要对其进行精简

要将其发送到控制器操作,可以将该值保存在窗体内的隐藏字段中。当用户发布表单时,它将在您的HttpPost操作方法中可用。您需要确保存在一个与隐藏字段的名称值同名的参数

@using (Html.BeginForm())
{
   <input type="text" name="lang" value="English" />
   <input type="hidden" name="pageName" 
                                 value="@Path.GetFileName(Server.MapPath(VirtualPath))" />

   <input id="BtnAdd" type="submit" value="Save" />

}
即使您正在做一篇ajax文章,它仍然可以工作,只需序列化表单并发送即可

$("#BtnAdd").click(function(e){
   e.preventDefault();
   var _this = $(this); 
   $.post("@Url.Action("MakeChange","Home")",_this.closest("form").serialize(),
                                                                       function(response){

        //do something with response
    });
});

有更多干净的方法可以获得视图名,而不需要我们使用的文件扩展名修剪方法。看看。

谢谢。那么我如何从控制器方法中检索它呢?它像一个请求吗?模型绑定会将隐藏字段的值(使用name属性)传递到MakeChange操作中所需的变量这里是一些其他示例:不幸的是,我使用jquery click事件作为提交按钮。我的页面没有发布帖子。我该怎么处理?
$("#BtnAdd").click(function(e){
   e.preventDefault();
   var _this = $(this); 
   $.post("@Url.Action("MakeChange","Home")",_this.closest("form").serialize(),
                                                                       function(response){

        //do something with response
    });
});