如何在编辑器中设置默认值,以便在我不在框中写任何内容时,它不会发送空值。
<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")
答案 0 :(得分:19)
要在字段中显示默认值,您必须在htmlAttributes中为其指定“Value”属性,如下例所示:
@Html.EditorFor(model => model.Description, new { htmlAttributes = new { @class = "form-control", @Value = ViewBag.DefaultDescription } })
确保V in Value为大写。
这样您只需在html字段上分配默认值,而不是在模型中。
在模型中指定默认值会强制您首先创建模型对象,并为非可空字段(如日期时间)设置默认值,这将使页面显示为烦恼1/1/1001 00:00:00您可以在模型的其余部分中使用的日期时间字段中的值。
答案 1 :(得分:11)
最简单的方法是在模型构造函数中初始化属性:
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
动作方法:
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所说,您不希望最终用户看到默认值,您将有其他一些解决方案。请让我知道你的目的。
答案 2 :(得分:1)
而不是使用
@Html.EditorFor(model => model.UserId)
使用
@Html.TextBoxFor(model => model.UserId, new { @Value = "Prabhat" })
答案 3 :(得分:0)
如何定义模型以获得其somthing属性的“默认值”?在这种情况下,你不需要做任何特别的事情。如果这不令人满意(例如,您不希望用户在屏幕上看到“默认值”),您可以为此模型创建一个继承自DefaultModelBinder的自定义模型绑定器,仅覆盖OnModelUpdated方法,其中类似的东西:
model.somthg = string.IsNullOrEmpty(model.somthing) ? "Default Value" : model.somthing
请注意,就我所知,EditorFor会忽略您发送给它的自定义html属性。