【发布时间】:2015-06-21 22:57:50
【问题描述】:
我已经阅读了许多关于允许对不同视图按钮执行不同控制器操作的文章。但是,我无法让它工作。
我使用从http://blog.ashmind.com/2010/03/15/multiple-submit-buttons-with-asp-net-mvc-final-solution/ 获得的这个code-sn-p。
public class HttpParamActionAttribute : ActionNameSelectorAttribute
{
public override bool IsValidName(ControllerContext controllerContext, string actionName, MethodInfo methodInfo)
{
if (actionName.Equals(methodInfo.Name, StringComparison.InvariantCultureIgnoreCase))
return true;
if (!actionName.Equals("Action", StringComparison.InvariantCultureIgnoreCase))
return false;
var request = controllerContext.RequestContext.HttpContext.Request;
return request[methodInfo.Name] != null;
}
}
当我单步执行此代码时,我看到 actionName 与 methodInfo.Name 的比较。当整个目的是命名与控制器操作不同的方法时,这些怎么可能相等。
对于行为/功能,true 或 false 的返回值究竟意味着什么?
我应该用“Action”覆盖“fciContactUs”操作吗?
控制器 = "HomeController"
[HttpParamAction]
[ActionName("Action")]
[AcceptVerbs(HttpVerbs.Post)]
[ValidateInput(false)]
public ActionResult DoClearForm(fciContactUs p_oRecord)
{
return RedirectToAction("fciContactUs");
}
[HttpParamAction]
[ActionName("Action")]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult TrySubmit(fciContactUs p_oRecord)
{
// This must be the Submit command.
if (ModelState.IsValid)
{ ...etc....}
}
视图(视图名称是'fciContactUs')表单开始:
@using (Html.BeginForm("Action", "Home")) {
视图按钮:
<input type="submit" name="TrySubmit" value="Submit" />
<input type="submit" name="DoClearForm" value="Clear Form" />
此外,IsValidName 方法总是返回 false,并且这些方法永远不会被执行。
我担心操作名称、视图名称、控制器名称、按钮名称和 ActionNameSelectorAttribute 类覆盖存在不一致。
我是 MVC 的新手,这整件事让我很困惑。
任何 cmets 或帮助将不胜感激。
【问题讨论】:
标签: asp.net-mvc-4 button razor view controller