2017-04-21 48 views
0

我試圖用Html.PasswordFor()生成密碼輸入,但它似乎生成了錯誤的名稱。Html助手似乎生成錯誤的名稱屬性?

這是我的整個代碼:

@using System.Web.UI.WebControls 
@using Duzan.Domain.Entities 
@model IEnumerable<Korisnik> 

@{ 
    ViewBag.Title = "Login"; 
} 

@ViewBag.Nered 



<div class="container"> 
    <div class="row"> 
     @foreach (var k in Model) 
     { 
      <div class="col-xs-6 col-sm-3" style="padding-bottom: 10px;"> 
       <div class="center-block" style="height: 150px; width: 150px; border: black solid 2px; text-align: center"> 
        @k.Ime 
        @using (Html.BeginForm()) 
        { 
         @Html.Hidden("Id", k.Id) 
         @Html.PasswordFor(m => k.Lozinka, new {name = "Lozinka", id = "Lozinka", placeholder = "lozinka", style = "width: 90%"}) 
         <input type="submit" @*style="visibility: hidden"*@/> 
        } 

       </div> 
      </div> 
     } 
    </div> 
</div> 

這是產生的HTML:

<input id="Lozinka" name="k.Lozinka" placeholder="lozinka" style="width: 90%" type="password"> 
+0

PasswordFor()不需要你設置名稱或ID作爲數據屬性,它爲你做。刪除名稱和ID屬性。 –

+0

@AlejandroPérezFals就是這個問題,如果我這樣做,它呈現爲,顯然我想它是id =「Lozinka」,而不是id =「k_Lozinka」或「k.Lozinka」 –

+0

首先提到[this answer](http://stackoverflow.com/questions/30094047/post-an-html -table-to-ado-net-datatable/30094943#30094943) - 你不能使用foreach循環爲集合生成表單控件。但你認爲沒有意義 - 爲什麼你有多個表單(你只能提交一個)有密碼輸入?你想在這裏做什麼? –

回答

-1

的問題是,您使用的型號的選擇器(M =>),包括其它對象(k)。不要使用通用版本的密碼小部件。使用

@Html.Password("lozinka", k.Lozinka, new { placeholder = "lozinka", style = "width: 90%"}) 
+0

謝謝!它現在可以工作,但是我可以知道爲什麼我不應該在這種情況下使用PasswordFor()? –

+0

PasswordFor使用您的Model類的選擇器。在這種情況下,您的Model是一個IEnumerable 。然後,您嘗試使用PasswordFor與非IEnumerable的對象(Korisnik)

+0

這就是生成無效的html(重複'id'屬性)並創建多個控件具有相同的'name'屬性,它永遠不會綁定模型已提交。 –

相關問題