2010-12-07 6 views
0

私は最初の行が強く型付けされたビューを持っています。MVC:エディタテンプレートが機能するための構文を取得できません

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Employee.Master" 
Inherits="System.Web.Mvc.ViewPage<IEnumerable<SHP.Models.AnnualLeaveBooked>>" %> 

IDの衝突を回避するには、コレクションをグリッドに表示して、エディタテンプレートを使用します(フィールドの1つが編集されます)。 私のコードでは、私はその行に入れました。

<%: Html.EditorFor(x => x) %> 

そして、EditorTemplateサブフォルダにこのテンプレートを入れます。

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<SHP.Models.AnnualLeaveBooked>" %> 

     <tr> 
      <td> 
       <%: String.Format("{0:g}", Model.AnnualLeaveDate) %> 
      </td>    
      <td> 
       <%: Model.ApprovedStatus %> 
      </td> 
      <td> 
       <%: Html.CheckBoxFor(model => model.CancelFlag) %> 

       <%: Html.HiddenFor(model => model.AnnualLeaveBookedId) %> 
      </td> 
     </tr> 

私が抱えている問題は、EditorForコマンドがEditorTemplateを認識していないように見えることです。 私は何が間違っていますか? x => xが間違っていると私は驚いていますが、おそらくこれを表現する良い方法があります。

+1

あなたの場合は、単に 'Html.EditorForModel()'だけを使うべきです。 –

答えて

1

あなたのエディタテンプレートは、次のとおりです。~/Views/Home/EditorTemplates/AnnualLeaveBooked.ascxここで、Homeはコントローラの名前です。グローバルエディタテンプレートの場合は、~/Views/Shared/EditorTemplates/AnnualLeaveBooked.ascxに入れることもできます。エディタテンプレートの名前に注意してください。タイプ名(AnnualLeaveBooked.ascx)と同じにする必要があります。また

の代わり:

<%: Html.EditorFor(x => x) %> 

あなた可能性:

:最後に、あなたは、このカスタム名を指定することができ ~/Views/Home/EditorTemplates/Foo.ascxのようないくつかのカスタム名を使用して、エディタのテンプレートに名前を付けたい場合は

<%: Html.EditorForModel() %> 

<%: Html.EditorForModel("Foo") %> 
+0

これは進歩です。しかし、<%:Html.EditorForModel( "AnnualLeaveForCancellation")%>ではエラーになりました。 System.InvalidOperationException:辞書に渡されたモデルアイテムが 'System.Collections.Generic.List'1 [SHP.Models.AnnualLeaveBooked]'型であるが、この辞書には 'SHP.Models.AnnualLeaveBooked'型のモデルアイテムが必要です。これは理にかなっています。私はページとテンプレートの間で送受信しているものをはるかに上げる必要があります。しかし、私が望むのは、データをグリッド内で循環させることです。 – arame3333

+0

@ arame3333、 'AnnualLeaveForCancellation.ascx'は' SHP.Models.AnnualLeaveBooked'ビューモデルに強く型付けされるべきです。それがエディタテンプレートの仕組みです。 –

+0

その情報を編集しました。 – arame3333

関連する問題