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