MVC新手問題;我被打轉轉,而不是閱讀手冊學習... :)MVC:點擊「提交」按鈕時會調用哪些代碼?
我看到,當我創建一個「編輯」查看自動生成的視圖包括「提交」按鈕:
<input type="submit" value="Save" />
但是在幕後調用哪些代碼可以保存?具體來說,這個視圖下面的模型在我想調用的代碼中有它自己的奇特保存邏輯。我如何獲得視圖來調用我的代碼,而不是在幕後無形地調用任何標準代碼?
MVC新手問題;我被打轉轉,而不是閱讀手冊學習... :)MVC:點擊「提交」按鈕時會調用哪些代碼?
我看到,當我創建一個「編輯」查看自動生成的視圖包括「提交」按鈕:
<input type="submit" value="Save" />
但是在幕後調用哪些代碼可以保存?具體來說,這個視圖下面的模型在我想調用的代碼中有它自己的奇特保存邏輯。我如何獲得視圖來調用我的代碼,而不是在幕後無形地調用任何標準代碼?
它會調用表單動作在控制器上指向的任何公共操作方法。然後您可以調用保存視圖模型。
public virtual ActionResult Save(MyViewModel model) {
model.Save();
--- more code to do stuff here
}
設置你的表單動作MyController/Save
您還可以使用using (Html.BeginForm...
在代碼的形式指向一個特定的操作方法特定的控制器上。
它調用在表單元素的動作部分中定義的操作的方法 例如:
<form action="/Account/LogOn" id="loginForm" method="post">
在賬戶控制器的登錄動作將在這種形式被調用
所述的ViewPage具有BeginForm方法using (Html.BeginForm()
在頂部將呈現FormTag。此方法有一個重載,它採用ActionName和控制器名稱。所以你可以在控制器中指定必須調用的動作。
當您單擊提交按鈕時,請求轉到HTTp模塊,該模塊會將其指向相應的控制器操作。當從模板創建編輯視圖形式的郵政通訊地址是一樣的編輯形式,即如果你正在訪問的/ home /編輯你可以看到下面的HTML形式的開放標籤
<form method="post" action="/home/edit">
你可以有另一種行動方法只接受POST請求喜歡
[HttpPost]
public ActionResult Edit(int id, ViewModel model)
{
//put your logic here handling submitted values
}
HttpPost屬性告訴它只會處理POST請求,而不是獲得了所請求用於渲染的形式
這不是按鈕那德罰款會發生什麼,但形式本身。提交類型(每個表單一個)的按鈕只是觸發表單提交,由表單本身處理。
某個表單的行爲 - 例如:
<form name="input" action="users/save" method="post">
<!-- Form content goes here -->
<input type="submit" value="Submit" />
</form>
行動是一個URL會發生什麼是瀏覽器收集的形式(<input...>
)所有字段的值,並將其發佈到指定的網址。
在ASP.NET中,MVC表單通常使用Html幫助器來定義,因此構建表單操作的URL被委託給ASP.NET MVC。對於上面的例子:
<% using(Html.BeginForm("Save", "Users")) %>
<% { %>
<!-- Form content goes here -->
<input type="submit" value="Save" />
<% } %>
在這種情況下將創建一個URL /users/save
和形式將發佈到該網址。這將觸發ASP.NET路由,它將處理URL並將其分解爲塊,以便它知道它必須調用「用戶」控制器類上的「保存」操作方法。然後它將讀取所有傳入的字段名稱 - 值對,並嘗試將它們映射到方法參數名稱(如果有的話)。
如果Html.BeginForm()沒有參數會怎麼樣?什麼是默認行爲?當前的控制器和索引? – KirstieBallance 2017-01-03 22:53:32
是的。不帶參數的BeginForm將HTTP POST發送到當前URL。請參閱:http://stackoverflow.com/a/16744311/381082 – DeveloperDan 2017-01-26 16:54:33
閱讀手冊將waaaay更快:) nerddinner教程是很好讓你自己去與mvc。 – raklos 2011-04-11 13:39:33