回答
它確實取決於錨標記的作用 - 大概是它觸發在JavaScript中提交?
如果它實際上只是在執行GET
而不是,那麼您可以按照@dbaseman的建議 - 爲兩種請求類型分別設置操作方法。
但是,如果錨沒有JavaScript的提交,然後我的偏好是簡單地給提交按鈕的名稱,以便您可以檢測到它的一個操作方法在服務器上,然後用叉子叉從那裏代碼:
<submit name="fromButtom" value="Submit" />
然後你的操作方法:
public ActionResult Foo(string fromButton)
{
//if 'fromButton' contains 'Submit' then you assume it was the button.
}
更妙的是你可以使用一個<button>
代替,然後你就可以從價值離婚顯示的文本,該按鈕提交(如果你是本地化的頁面是有用的) :
<button name="submitMethod" value="fromButton">Submit</button>
現在,您可以在您的操作方法上有一個submitMethod
參數,其中您尋找'fromButton'
。
無論哪種方式 - 錨定標記/ JavaScript(如果這是你如何做)不會提交此值,因爲按鈕的值只在點擊時提交。
好,我可以使用這個解決方案,但是我使用提交按鈕中的值作爲我的顯示文本,我不想在我的代碼中依賴它。我使用的是一個自定義的HTML幫手,如下所示 – ancdev
只需使用MVC HttpPost和HTTPGET在不同版本的動作的屬性:
[HttpPost]
public ActionResult FormAction(Model model, string method = post) { ... }
[HttpGet]
public ActionResult FormAction(Model model) { ... }
您可能想要在這裏更改方法名稱 - 不會編譯。你需要不同的方法名稱和一個'[ActionName]':) –
@AndrasZoltan除非我失去它(完全可能,因爲它是凌晨2點),應該complie。你看到什麼問題? – McGarnagle
哈哈 - 我去過那兒了!兩種方法具有相同的名稱和相同的參數;即他們是重複:) –
您可以使用Url.Action或Html.ActionLink http://geekswithblogs.net/liammclennan/archive/2008/05/21/122298.aspx。
如果這些方法完全不同,那麼您應該使用JavaScript來使它們的行爲不同。使用jQuery例如,它看起來像:
$("#sbutton").click(function() {
alert("Submit button clicked!");
// Do whatever you need - validate/initialize-fields/etc.
return false; // This is required to prevent normal form submit
});
$("#slink").click(function() {
alert("Link clicked!");
// Do whatever you need - validate/initialize-fields/etc.
return false; // This is required to prevent normal form submit
});
我想補充另一種解決辦法,如果你想創造的東西,將與JavaScript的工作,關閉,這不是方便更改按鈕的名稱和值,那麼你可以試試這是我在生產代碼中使用的。
創建這樣一個幫手:
using System;
using System.Reflection;
using System.Web.Mvc;
namespace Whatever
{
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public class MultipleSubmitAttribute : ActionNameSelectorAttribute
{
public string Name { get; set; }
public string Argument { get; set; }
public override bool IsValidName(ControllerContext controllerContext,
string actionName, MethodInfo methodInfo)
{
bool isValidName = false;
string keyValue = string.Format("{0}:{1}", Name, Argument);
var value = controllerContext.Controller.ValueProvider.GetValue(keyValue);
if (value != null)
{
value = new ValueProviderResult(Argument, Argument, null);
controllerContext.Controller.ControllerContext.RouteData.Values[Name] = Argument;
isValidName = true;
}
return isValidName;
}
}
}
現在在你的表格,你可以做這樣的事情:
<input type="submit" name="action:DoSomething" value="Do something" />
<input type="submit" name="action:DoSomethingElse" value="Do something else" />
然後在你的控制器,你可以裝飾你這樣的操作方法:
[HttpPost]
[MultipleSubmit(Name = "action", Argument = "DoSomething")]
public ActionResult DoSomething(ViewModel vm)
{ ... }
[HttpPost]
[MultipleSubmit(Name = "action", Argument = "DoSomethingElse")]
public ActionResult DoSomethingElse(ViewModel vm)
{ ... }
如果我有兩個按鈕,而不是標籤和一個按鈕 – ancdev
這個解決方案本來可以工作的很好,我認爲它可能會派上用場,以備將來使用。另外,你也可以使用javascript這樣的''標籤來提交它:'onclick =「$(this).parents('form')。submit(); return false;'' –
- 1. 表單提交多次asp.net mvc
- 2. ASP.NET MVC 3型空對提交
- 3. 多次提交按鈕(asp.net mvc3)
- 4. 通過.ascx&ajax加載的ASP.NET MVC表單多次提交
- 5. 如何避免在ASP.NET MVC中多次提交表單?
- 6. 通過ajax加載的ASP.NET MVC表單多次提交
- 7. 停止cakephp 3.x FORM在多點提交後多次提交提交按鈕
- 8. 在MVC中防止多次提交
- 9. MVC asp.net:提交多個表單
- 10. ASP.NET MVC:多使用提交Ajax.BeginForm
- 11. 多次提交
- 12. 多次提交
- 13. MVC 3 Ajax.BeginForm提交問題
- 14. 表單提交兩次mvc
- 15. ASP.NET MVC提交表格
- 16. ASP.NET MVC表單提交
- 17. ajax表格在第二次提交時提交兩次,第三次提交時提交3次等
- 18. asp.net表單提交兩次
- 19. 在asp.net mvc中使用Valums插件提交的Ajax表單提交3
- 20. ASP.net MVC 3多選列表
- 21. ASP.Net MVC 3個多CheckBoxLists
- 22. ASP.NET MVC 3多語言SEO
- 23. 通過點擊兩次提交避免在Asp.net MVC中重複表單提交
- 24. jQuery Ajax多次提交多次
- 25. Asp.net mvc ajax多跑一次
- 26. 如何防止ASP.NET MVC 3中的重複表單提交?
- 27. Asp.Net MVC 3 formcollection提交後丟失數據
- 28. 簡單的JQuery表單提交與ASP.NET MVC 3
- 29. ASP.NET MVC 3不顯眼的驗證,提交和TinyMCE
- 30. 提交使用jquery ajax的asp.net MVC 3表單
您可以在提交之前使用javascript更改操作方法。 –