web-dev-qa-db-ja.com

デフォルト値の設定方法HTML.EditorFor()

エディターボックスにデフォルト値を設定して、ボックスに何も書き込まない場合にnull値を送信しないようにするにはどうすればよいですか。

 <div class="editor-label">
        @Html.Label("Description")
        </div>                                           // somthing like
       <div>@Html.EditorFor(model => model.Description, " Default value ")
        @Html.ValidationMessageFor(model => model.Description)
    </div>

または、次のように変更した場合:

 @Html.TextBoxFor(Model.somthing, "Default value")
9
Fadi Alkadi

フィールドにデフォルト値を表示するには、次の例のように、htmlAttributesで「Value」プロパティを割り当てる必要があります。

@Html.EditorFor(model => model.Description,  new { htmlAttributes = new { @class = "form-control", @Value = ViewBag.DefaultDescription } })

値のVが大文字であることを確認してください。

このようにして、モデルではなくhtmlフィールドにデフォルト値を割り当てるだけです。

モデルにデフォルト値を割り当てると、最初にモデルオブジェクトを作成する必要があります。これにより、日時などのnull許容でないフィールドのデフォルト値が設定され、ページに迷惑な1/1/100100:00:00の値が表示されます。モデルの残りの部分に含めることができる日時フィールド。

19
Gabriel Pravaz

最も簡単な方法は、モデルコンストラクターでプロパティを初期化することです。

public class PersonModel {
    public PersonModel () {
        FirstName = "Default first name";
        Description = "Default description";
    }
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Description { get; set; }
}

そして、それをビューに送信したい場合、たとえばPersonController.Create action-method:

public ActionResult Create() {
    var model = new PersonModel();
    return View(model);
}

[HttpPost]
public ActionResult Create(PersonModel model) {
    // do something on post-back 
}

それだ。デフォルト値を使用するには、モデルの新しいインスタンスを作成してビューに渡す必要があることを忘れないでください。このアクションメソッドに関連付けられているビューはPersonModelインスタンスを想定しているためですが、次のようなcreateメソッドを使用する場合:

public ActionResult Create() {
    return View();
}

ビューには何も表示されないため(つまり、null)、デフォルト値は実際には存在しません。

しかし、複雑な目的でこれを実行したい場合、たとえばデフォルト値を透かしとして使用するか、@ JTMonが言ったように、エンドユーザーにデフォルト値を表示させたくない場合は、他の解決策がいくつかあります。目的を教えてください。

12
javad amiry

使用する代わりに

 @Html.EditorFor(model => model.UserId) 

使用する

@Html.TextBoxFor(model => model.UserId, new { @Value = "Prabhat" })
1
Prabhat

Somthingプロパティの「デフォルト値」を持つようにモデルを定義するのはどうですか?その場合、特別なことをする必要はありません。それが不十分な場合(たとえば、ユーザーに画面に「デフォルト値」を表示させたくない場合)、DefaultModelBinderから継承するこのモデルのカスタムモデルバインダーを作成し、OnModelUpdatedメソッドのみをオーバーライドすることができます。次のようなもの:

model.somthg = string.IsNullOrEmpty(model.somthing) ? "Default Value" : model.somthing

EditorForは、私が知る限り、送信されたカスタムhtml属性を無視することにも注意してください。

0
JTMon