如何设置默认值HTML.EditorFor()

时间:2013-05-15 09:51:28

标签: asp.net-mvc razor editorfor

如何在编辑器中设置默认值,以便在我不在框中写任何内容时,它不会发送空值。

 <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")

4 个答案:

答案 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属性。