2016-09-11 32 views
5

Trong số official ASP.NET Core tutorial này, tôi có thể sử dụng Input Tag Helper như hình dưới đây. Nhưng do một số known model binding issue of form elements in a foreach loop, tôi muốn sử dụng for loop để thay thế. Câu hỏi: Nếu tôi thay thế @foreach (var item in Model) bằng @for (int i=0; i < Model.Count(); i++) trong View sau đây. Điều gì sẽ là asp-for của tôi trong <input asp-for="???" />? Đối với một số lý do, IntelliSense không nhận ra, ví dụ như, Model [i] .BlogId hoặc @Model [i] .BlogIdASP.NET mvc Xem với trình trợ giúp mô hình và đầu vào IEnumerable

@model IEnumerable<EFGetStarted.AspNetCore.NewDb.Models.Blog> 

@{ 
    ViewBag.Title = "Blogs"; 
} 

<h2>Blogs</h2> 

<p> 
    <a asp-controller="Blogs" asp-action="Create">Create New</a> 
</p> 

<table class="table"> 
    <tr> 
     <th>Id</th> 
     <th>Url</th> 
    </tr> 

    @foreach (var item in Model) 
    { 
     <tr> 
      <td> 
       <input asp-for="@item.BlogId" /> 
      </td> 
      <td> 
       <input asp-for="@item.Url" /> 
      </td> 
     </tr> 
    } 
</table> 
+0

Tại sao bạn cần các trường biểu mẫu nhập liệu nếu chúng không có trong biểu mẫu? Nếu nó chỉ dành cho mục đích hiển thị, bạn có thể chỉ cần in giá trị. – Shyju

+0

@Shyju Bài đăng này chỉ nhằm mục đích giải thích câu hỏi của tôi. Trong dự án thực, tôi cần các trường biểu mẫu đầu vào và tôi muốn thử nghiệm trình trợ giúp thẻ đầu vào với 'for loop' vì vấn đề với vòng lặp foreach (như được mô tả [ở đây] (http://stackoverflow.com/a/15636604/ 1232087)). Ngoài ra, @model cần phải được IEnumerable. – nam

+0

Bạn không thể sử dụng vòng lặp 'for' với 'IEnumerable ' - nó sẽ cần phải là 'IList ' –

Trả lời

0
@model IEnumerable<EFGetStarted.AspNetCore.NewDb.Models.Blog> 

    @{ 
     ViewBag.Title = "Blogs"; 
    } 

    <h2>Blogs</h2> 

    <p> 
     <a asp-controller="Blogs" asp-action="Create">Create New</a> 
    </p> 

    <table class="table"> 
     <tr> 
      <th>Id</th> 
      <th>Url</th> 
     </tr> 
    @for (int item = 0; item < Model.Count(); item++) 
     { 
      <tr> 
       <td> 
       <input name="@Model.ToList()[item].BlogId" /> 
       </td> 
       <td> 
       <input name="@Model.ToList()[item].Url" /> 
       </td> 
      </tr> 
     } 
    </table> 
0

tôi đã cùng một vấn đề và giải quyết nó theo cách này:

@for (int i = 0; i < Model.Translations.Count; i++) 
{ 
    @Html.HiddenFor(m => m.Translations[i].LanguageId) 
    <form-group-text asp-for="@Model.Translations[i].Content"/> 
} 

Phần quan trọng là sử dụng vòng lặp for và truy cập asp-for qua @Model.

Điều đó nói rằng, bạn nên suy nghĩ lại, nếu chính Mô hình của bạn phải là IEnumerable. Thay vào đó tạo một thuộc tính cho nó. Ngoài ra, bạn cần đảm bảo rằng Bộ sưu tập của bạn có thể truy cập được qua Chỉ mục. Bạn có thể làm cho tài sản của bạn thuộc loại IList. Khi bạn chỉ định IEnumerable cho nó, bạn có thể gọi ToList trước đây.

Các vấn đề liên quan