Path.GetFileName(Server.MapPath(VirtualPath))
会给你带有扩展名的剃须刀视图名称(例如:index.cshtml
)。由于RedirectToAction方法正在查找操作方法名称,因此无法将其与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" />
}
所以,你的操作方法将
public ActionResult MakeChange(string lang,string pageName)
{
var viewName=pageName;
//Get rid of the extension.
viewName = viewName.Replace(".cshtml","");
return RedirectToAction(viewName , "Home");
}
即使你正在做一个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
});
});
有更干净的方式获得视图名称没有我们做的文件扩展名修剪方法。看看this answer。
谢谢。那么如何从控制器方法中检索这个?这是否像一个请求? – user2320476
模型绑定会将隐藏字段的值(使用name属性)传递给您在MakeChange动作 –
中预期的变量,其中包含一些其他示例:http://stackoverflow.com/a/20333225和http:// www.codeproject.com/Articles/576514/AplusBeginner-splusTutorialplusonplusVariousplus –