2013-08-19 63 views
1

我已经试过落实选项this article.多个不同的一种形式提交按钮

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; 
    } 
} 

我控制器操作说明:

[HttpParamAction] 
[HttpPost] 
public virtual ActionResult EditAccouncement(_AccouncementPostViewModel m) 

[HttpParamAction] 
[HttpPost] 
public virtual PartialViewResult DeleteAnnouncement(int id) 

我的形式:

@using (Ajax.BeginForm("Action", ajaxOptions: new AjaxOptions() 
    { 
     HttpMethod = "POST", 
     InsertionMode = InsertionMode.Replace, 
     UpdateTargetId = "announcement" + @Model.id 
    })) 
{ 
      //form values omitted 
      <button type="submit" class="submitbutton" name="edit">Change details</button> 
      <button type="submit" class="submitbutton" name="delete">Delete</button> 
} 

然而,控制器操作被调用仍然只是Action方法(不存在)。我错过了什么吗?

+0

如果您的按钮具有“值=‘

+0

根据示例,应将操作方法​​重命名为编辑和删除以匹配按钮上的名称。 –

回答

1

您的问题是由您的操作名称和按钮名称属性之间的不匹配造成的。

你的按钮的name属性的值必须与动作的名称,就像这样:

<button type="submit" name="EditAccouncement">Change details</button> 
<button type="submit" name="DeleteAnnouncement">Delete</button> 

更新:我会建议不同的方法都在一起。这个解决方案对我来说似乎是反直觉的,并不是特别容易遵循。

通过将两个不同的事件处理程序连接到按钮,您可以轻松使用JavaScript(例如jquery)来处理表单“手动”提交。一个事件会使POST进入EditAccouncement(打字错误!)操作,并且会发出一条POST到DeleteAnnouncement操作。

我做了一个的jsfiddle样机这表明代码:http://jsfiddle.net/wmWNj/3/

更新2:固定错别字的jsfiddle

+0

当然啊!非常感谢! –

+0

查看我的更新,了解其他方法 – havardhu

相关问题