Как связать Ienumerable <TModel>в цикле foreach? - PullRequest
0 голосов
/ 22 февраля 2012

У меня есть вид MVC2, который сильно привязан к модели ...

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<System.Collections.Generic.IEnumerable<AdjustmentModel>>" %>

А в виде у меня есть ...

         foreach (var adjustment in Model)
           {%>
         <tr row="<%: row %>">
            <td class="nonSelectable" column="0">
                <div>
                    ...I want to put a textbox here that has name="someId" 
                   and val="someVal" but how?
                </div>
            </td>

            }%>

Модель

class AdjustmentModel
{
    public int ID;
    public int amount;
}

Я просто не могу понять, какой делегат я передаю Html.TextBoxFor (), потому что когда я передаю модель, intellisense не будет работать, когда я передаю Ienumerable, так как мне использовать модель?

Ответы [ 2 ]

1 голос
/ 22 февраля 2012

Я бы порекомендовал вам использовать шаблоны редактора. Таким образом, вам не нужно писать какие-либо циклы и сохранять строгую типизацию:

<table>
    <%= Html.EditorForModel() %>
</table>

и затем вы определяете шаблон редактора, который будет автоматически отображаться для каждого элемента вашей коллекции (~/Views/Shared/EditorTemplates/AdjustmentModel.ascx):

<%@ Control 
    Language="C#" 
    Inherits="System.Web.Mvc.ViewUserControl<AdjustmentModel>" 
%>
<tr>
    <td class="nonSelectable" column="0">
        <div>
            <%= Html.HiddenFor(x => x.ID) %>
            <%= Html.EditorFor(x => x.amount) %>
        </div>
    </td>
</tr>

Важно соблюдать соглашение, согласно которому шаблон вашего редактора должен находиться в папке ~/Views/CurrentController/EditorTemplates или ~/Views/Shared/EditorTemplates. Имя шаблона должно соответствовать типу, используемому в коллекции. Так, например, если у вас есть IEnumerable<AdjustmentModel>, файл должен называться AdjustmentModel.ascx и явно строго типизирован как AdjustmentModel. Этот шаблон будет автоматически вызываться для каждого элемента.

0 голосов
/ 22 февраля 2012

Вы можете использовать Html.TextBox

<%= Html.TextBox("SomeId", "SomeVal") %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...