カスタムViewModelとMVC2強く型付けされたHTMLヘルパー nullを返しオブジェクトに創作を行うのでしょうか。

StackOverflow https://stackoverflow.com/questions/2494940

質問

私有するトラブルを作り出してしまおうというもの企業とカスタムビューのモデルを作成。以下は私のカスタムビューモデルカテゴリを作成できます

public class CategoryFormViewModel
{
    public CategoryFormViewModel(Category category, string actionTitle)
    {
        Category = category;
        ActionTitle = actionTitle;
    }

    public Category Category { get; private set; }
    public string ActionTitle { get; private set; }
}

これが私のユーザー制御のUIは

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

        <h2>
            <span><%= Html.Encode(Model.ActionTitle) %></span>
        </h2>
        <%=Html.ValidationSummary() %>
        <% using (Html.BeginForm()) {%>
        <p>
            <span class="bold block">Başlık:</span>
            <%=Html.TextBoxFor(model => Model.Category.Title, new { @class = "width80 txt-base" })%>
        </p>
        <p>
            <span class="bold block">Sıra Numarası:</span>
            <%=Html.TextBoxFor(model => Model.Category.OrderNo, new { @class = "width10 txt-base" })%>
        </p>        
        <p>
            <input type="submit" class="btn-admin cursorPointer" value="Save" />
        </p>
        <% } %>

私が使いやすい場所に保存すれば完了ボタン、ものだが、結合するカテゴリの私にとってのを使ってカスタムビューのモデルは、強く型付けされたhtmlヘルパーのような

<%=Html.TextBoxFor(model => Model.Category.OrderNo) %>

私のhtmlソースのようになります

<form action="/Admin/Categories/Create" method="post">
        <p>
            <span class="bold block">Başlık:</span>
            <input class="width80 txt-base" id="Category_Title" name="Category.Title" type="text" value="" />
        </p>
        <p>
            <span class="bold block">Sıra Numarası:</span>
            <input class="width10 txt-base" id="Category_OrderNo" name="Category.OrderNo" type="text" value="" />
        </p>        
        <p>
            <input type="submit" class="btn-admin cursorPointer" value="Kaydet" />
        </p>
        </form>

どうしたらいいですか?

役に立ちましたか?

解決

ご視モデルのニーズをデフォルトのコンストラクタなパラメータに必要な公共の設定方法は各物件です。デフォルトのモデルのバインダーの公開セッターを生成するためのオブジェクトです。


デフォルトのモデルのバインダーは一定の規則に従います。を選択してどのようなデータを結合するには、以下の順序:

  1. 形状パラメータからポスト
  2. Urlのルートデータで定義されるようルート定義です。asax.cs
  3. クエリ文字列パラメータ

デフォルトのモデルのバインダーを利用し複数の戦略に結合モデル/パラメータの処理方法

  1. 正確な名前の試合
  2. マッチプレフィックス.名のプレフィックスは、親クラスと名前のサブクラス/物件
  3. 名前なしのプレフィックス(どありませんの衝突のあいだにも安心の提供について、prefix)

をオーバーライドすることができ行動の複数のオプションに結合する属性。これらには:

  • Bind(Prefix="someprefix")] --勢力地図の特定の親クラスで識別される接頭辞です。
  • [結合する(するものではありません"val1,val2")] --Whitelistの名前は結合
  • Bind(除="val1,val2")] --名を除外するからデフォルトの動作

他のヒント

あなたは、エディタのテンプレートを使用することができます。 ~/Views/Shared/EditorTemplates/SomeControl.ascxであなたのascxファイルのコントロールを置きます。次に、あなたのメインビュー(aspxページ)内ので(あなたのビューが強くCategoryFormViewModelに型付けされたと仮定した場合)のようなテンプレートが含まれます:

<%= Html.EditorForModel("SomeControl") %>

の代わりに

<% Html.RenderPartial("SomeControl", Model) %>

あなたのviewmodelのデフォルトコンストラクタを作成し、カテゴリーを初期化するが。

public CategoryFormViewModel() 
{ 
    Category = new Category()
}

そして、あなたのコントローラのアクションで受け取るのviewmodel

public ActionResult ActionName(CategoryFormViewModel model)
{
    //here you can access model.Category.Title
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top