2011-03-24 8 views
0

私は、さまざまなモデルクラスのカスタムEditorTemplatesをいくつか持っています。これらのテンプレートの中で、私は明らかにモデルのプロパティを参照する必要があります。私の問題は、Model.Id(たとえば)の直接構文を使用すると、値がnullであることです。別の例は、空の文字列を返すModel.Nameです。しかし、式でモデルを参照すると(たとえば、@ Html.TextBoxFor(i => i.Name))、その値がそこにあります。この例ではMVC 3 EditorTemplate - モデルのプロパティが空です。

@model Vigilaris.Booking.Services.CompanyDTO 
<div> 
    <fieldset class="editfieldset"> 
     <legend class="titlelegend">Company Details</legend> 
     <ol> 
      <li> 
       @Html.TextBox("tb1", @Model.Id) 
       @Html.TextBox("tb2", @Model.Name) 
      </li> 
      <li> 
       @Html.LabelFor(i => i.CreatedDate) 
       @Html.DisplayFor(i => i.CreatedDate) 
      </li> 
      <li> 
       @Html.LabelFor(i => i.Name) 
       @Html.TextBoxFor(i => i.Name) 
      </li> 
      <li> 
       @Html.LabelFor(i => i.Description) 
       @Html.TextAreaFor(i => i.Description) 
      </li> 
      <li> 
       @Html.LabelFor(i => i.Phone) 
       @Html.TextBoxFor(i => i.Phone) 
      </li> 
     </ol> 
    </fieldset> 
</div> 

、モデルからのデータを表示LabelForとDisplayForヘルパー機能を使用しているすべてのコード:さらに例示する

は、ここでコードスニペットです。ただし、Html.TextBoxコード部分はModel.Idに0を返し、Nameに空の文字列を返します。

モデルを直接参照すると、実際のモデルデータにアクセスできないのはなぜですか?

+0

おそらく原因ではありませんが、あなたは冗長な@を1つ持っています。 @ Html.TextBox( "tb1"、Model.Id)を使用します(Modelの前に@はありません)。 –

答えて

1

。私が問題の記述で除外したことの1つは、Telerik MVCグリッド拡張を使用していて、EditorTemplateがインフォーム編集に使用していたということでした。したがって、この時点ではModelプロパティは使用できません。これは理解できる動作です。 Telerik MVC Gridでクライアント側のonEditイベントを使用し、必要に応じてこれらの値を設定する必要がありました。私はこれを解決覚えてどのように

は、次のように私は私のTelerik MVCグリッドにClientEventを追加したことである:

.ClientEvents(events => events.OnEdit("Users_onEdit")) 

これは編集がトリガされたときにUsers_onEditと呼ばれる私のjavascriptの機能を実行するためにグリッドに指示します。次に、私のjavascript関数では、私が望むフィールドを見つけて、その値を設定します。コードの抜粋は次のとおりです。

function Users_onEdit(e) { 
    if (e.mode == "insert") { 
     $("#UserName").removeAttr("readonly"); 
     $("#UserName").removeAttr("title"); 
     $("#divNewUserMessage").show(); 

     var formId = String(e.form.id); 
     var formIndex = formId.indexOf("form"); 
     var companyId = formId.substr(6, formIndex -6); 
     var hiddenCompanyId = $(e.form).find("#CompanyId"); 
     hiddenCompanyId.val(companyId); 
    } 
} 

これが他の人に役立つことを願っています。

+0

あなたの解決策を教えてください。私は同じ状況で自分自身を見つける –

+0

確かに@death_au、私はそれを掘る必要がありますが、まもなくそうしようとします。 – Ozzy

+1

ちょっと@death_au、私は要求通りにコードを追加しました。上記を参照。お役に立てれば。 – Ozzy

1

私はこれを再現できません。より多くのコンテキスト(コントローラ、ビューなど)を提供する必要があるかもしれません。

@Html.TextBox("Id", Model.Id) 
@Html.TextBox("Name", Model.Name) 

をしても、なぜ直接強く型付けされたバージョンを使用していない:また、あなたのテキストボックスには、このように命名すべきではない、私はこの1つを把握するために管理

@Html.TextBoxFor(x => x.Id) 
@Html.TextBox(x => x.Name) 
関連する問題