2012-02-22 10 views
-1

私はモデルがforeachループでIenumerable <TModel>をバインドするにはどうすればよいですか?

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

ある

  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> 

      }%> 

...

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

そして、私が持っているビューの... MVC2ビューウィッヒが強くモデルにバインドされてい私はHtml.TextBoxFor()に渡すデリゲートを理解できません。なぜなら、モデルを渡すと、imはIenumerableを渡すので、intellisenseは動作しません。どのようにモデルを使用するのですか?

答えて

1

エディタテンプレートを使用することをお勧めします。あなたが任意のループを書いて、まだ強い型付けを維持する必要はありません。この方法:

<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

あなたはHtml.TextBox

<%= Html.TextBox("SomeId", "SomeVal") %> 
を使用することができます
関連する問題