エディターボックスにデフォルト値を設定して、ボックスに何も書き込まない場合に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")
フィールドにデフォルト値を表示するには、次の例のように、htmlAttributesで「Value」プロパティを割り当てる必要があります。
@Html.EditorFor(model => model.Description, new { htmlAttributes = new { @class = "form-control", @Value = ViewBag.DefaultDescription } })
値のVが大文字であることを確認してください。
このようにして、モデルではなくhtmlフィールドにデフォルト値を割り当てるだけです。
モデルにデフォルト値を割り当てると、最初にモデルオブジェクトを作成する必要があります。これにより、日時などのnull許容でないフィールドのデフォルト値が設定され、ページに迷惑な1/1/100100:00:00の値が表示されます。モデルの残りの部分に含めることができる日時フィールド。
最も簡単な方法は、モデルコンストラクターでプロパティを初期化することです。
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が言ったように、エンドユーザーにデフォルト値を表示させたくない場合は、他の解決策がいくつかあります。目的を教えてください。
使用する代わりに
@Html.EditorFor(model => model.UserId)
使用する
@Html.TextBoxFor(model => model.UserId, new { @Value = "Prabhat" })
Somthingプロパティの「デフォルト値」を持つようにモデルを定義するのはどうですか?その場合、特別なことをする必要はありません。それが不十分な場合(たとえば、ユーザーに画面に「デフォルト値」を表示させたくない場合)、DefaultModelBinderから継承するこのモデルのカスタムモデルバインダーを作成し、OnModelUpdatedメソッドのみをオーバーライドすることができます。次のようなもの:
model.somthg = string.IsNullOrEmpty(model.somthing) ? "Default Value" : model.somthing
EditorForは、私が知る限り、送信されたカスタムhtml属性を無視することにも注意してください。