簡體   English   中英

ASP.NET MVC中的@ Html.BeginForm出現問題

[英]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"/>

您可以使用BindAttributePrefix屬性

[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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM