3

次のようなモデルクラスがあります

public class Mod
{
    public string StaticProp1 {get; set;}
    public string StaticProp2 {get; set;}

    public string EditableProp1 {get; set;}
}

EditableProp1編集はできるがStaticProp1、が表示されているが編集できないビューが必要ですStaticProp2

強く型付けされたビューを作成しました:

@model Mod

@using (Html.BeginForm()) 
{
    <p>@Model.StaticProp1</p>
    <p>@Model.StaticProp2</p>

    @Html.TextBoxFor(m => m.EditableProp1)

    <input type="submit" value="Save" />
}

私のコントローラーでは、アクションを処理すると、EditableProp1 が適切であることがわかります。

[HttpPost]
public ActionResult Edit(Mod model, FormCollection collection)
{
    string editableProp = model.EditableProp1; //This works fine

    string staticProp1 = model.StaticProp1; //Missing  

    return View(model);
}

staticProp1 が null になり、ビューがそれを表示できないため、何らかの理由でポストバックすると問題が発生します。

私は追加できることを知っています

@Html.HiddenFor(m => m.StaticProp1)
@Html.HiddenFor(m => m.StaticProp2)

私の見解ではうまくいくと思いますが、別のより良い方法があるかどうか疑問に思っています。

私の値はすでにフォーム ( <p>@Model.StaticProp1</p>) にあります。そのような編集不可能なタグにモデルをバインドする方法はありますか? このようなことを行う HTML ヘルパーはありますか?

ちなみに、明らかでない場合は、私は MVC を使い始めたばかりなので、ポイントを完全に見逃している場合はお知らせください。

4

2 に答える 2

1

質問は、モデルバインディングとその仕組みに関連していると思います。ここで非表示フィールドを使用したくない場合 (シナリオに適していると思います)、以下からクラスを継承してモデル バインドをカスタマイズできます。

DefaultModelBinder  
于 2013-10-02T06:56:14.623 に答える