我如何有2個按鈕和每個按鈕來執行不同的回發操作? 例如:2個按鈕在視圖中執行不同的操作在asp.net mvc
- 我想Button1以提交表單的 內容。
- 我希望button2 能夠顯示 數據庫中的某些數據,而不會在 表單中存儲什麼內容。
現在,由於即時通訊使用表單集合,這兩個按鈕似乎存儲的數據。如何區分按鈕?
謝謝
我如何有2個按鈕和每個按鈕來執行不同的回發操作? 例如:2個按鈕在視圖中執行不同的操作在asp.net mvc
現在,由於即時通訊使用表單集合,這兩個按鈕似乎存儲的數據。如何區分按鈕?
謝謝
您需要檢查表單集合中是否存在相關的Submit按鈕並執行相關操作。
例如,假設Button1的& Button2的,你只需要在控制器的操作方法一種形式
接受POST
public actionresult SomeMethod(FormCollection form)
{
if (form.AllKeys.Contains("Button1")
{
doSomething();
}
else // assuming only two submit buttons
{
doSomethingElse();
}
}
HTH,
丹
按鈕不存儲任何東西。按鈕啓動HTTP POST請求。
現在,如果您希望這些POST命中不同的控制器操作,則需要將它們放入兩個不同的窗體並指定兩個不同的窗體URL。
<% BeginForm ("/action1"); %>
<input type="submit" value="Action1" />
<% EndForm();
<% BeginForm ("/action2"); %>
<input type="submit" value="Action2" />
<% EndForm();
然後,你需要兩個不同的控制器動作的路由(在Global.asax中)映射:
routes.MapRoute(
"Action1",
"/action1",
new { controller = "Test", action = "PostAction1" });
routes.MapRoute(
"Action2",
"/action2",
new { controller = "Test", action = "PostAction2" });
而且您的控制器是在那裏等着這些行動:
public class TestController : Controller
{
[AcceptVerbs (HttpVerbs.Post)]
public ActionResult PostAction1 (FormCollection form)
{
// Do something
return View();
}
[AcceptVerbs (HttpVerbs.Post)]
public ActionResult PostAction2 (FormCollection form)
{
// Do something
return View();
}
}
然後你決定自己想要在這些行爲上發生什麼,保存數據或做其他事情。
您可以將每個按鈕放在不同的表單中,並具有不同的提交操作。像這樣:
<% using (Html.BeginForm("/FirstAction")) {%>
<input type="submit" />
<% } %>
<% using (Html.BeginForm("/SecondAction")) {%>
<input type="submit" />
<% } %>
兩個形式的做法是好的只要表單不需要共享輸入字段(文本框等)即可。如果他們需要分享,或者按鈕要彼此相鄰放置(以使表單以某種方式重疊),那麼使用兩種表單就會開始分解。
此外,我不喜歡在控制器內調度,基於檢測哪個按鈕已被點擊從FormCollection。派發方法會產生一個間接層,使事情變得不那麼清晰:例如,您無法修飾您使用AcceptVerbs派發的方法。
取而代之,我們只需捕獲JavaScript onclick事件並設置表單的操作。
<% using (Html.BeginForm("Save", "Contact"))
{ %>
<input type="submit" value="Save" />
<input type="submit" value="Find Similar" onclick="this.form.action = rootDir + 'Contact/Find'" />
<% }%>