[英]Trouble with @Html.BeginForm in ASP.NET MVC
我有一個看起來像這樣的表格:
@using (Html.BeginForm("Login", "Home", FormMethod.Post, new { @class = "nav-login-form" }))
{
@Html.TextBoxFor(m => m.LoginForm.Username, new {@placeholder = "username"})
@Html.HiddenFor(m => m.LoginForm.Username)
@Html.PasswordFor(m => m.LoginForm.Password, new { @placeholder = "password" })
@Html.HiddenFor(m => m.LoginForm.Password)
<input type="submit" value="login"/>
}
但是,提交此表單時,似乎未執行controller方法。 它具有如下簽名:
[HttpPost]
public ActionResult Login(NavBarLogin loginForm)
我的表單位於HomepageViewModel作為模型類型的局部視圖中。 該模型內部有一個LoginForm對象,這是表單應該發布到控制器的對象。 像這樣將模型從索引視圖傳遞到部分視圖:
@Html.Partial("_NavBarPartial", Model)
關於此表單為何無法正常工作的最好猜測是,因為視圖中定義的模型與表單使用的模型對象不同。 但是,我不能簡單地將NavBarLogin用作模型類型,因為模型的其他部分已在局部的其他地方使用。 我可以嘗試進一步分解,但這真的是使此表單起作用的必要條件嗎? 我的假設甚至正確嗎?
編輯 :我的論壇是這樣呈現的,動作應該是空白的嗎?
<form action="" class="nav-login-form" method="post">
<input id="LoginForm_Username" name="LoginForm.Username" placeholder="username" type="text" value="" />
<input id="LoginForm_Password" name="LoginForm.Password" placeholder="password" type="password" />
<input type="submit" value="login"/>
您可以使用BindAttribute
的Prefix
屬性
[HttpPost]
public ActionResult Login([Bind(Prefix="LoginForm")] NavBarLogin loginForm)
由於您的輸入被渲染為
<input type="text" name="LoginForm.Username" value=.../>
並且NavBarLogin
具有屬性Username
(不是具有屬性UserName
的復雜屬性LogInForm
),其作用是有效剝離"LoginForm."
從發布的值,以便它們將正確綁定
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.