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

Fad*_*adi 9 asp.net-mvc editorfor razor

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

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

或者,如果我改为:

 @Html.TextBoxFor(Model.somthing, "Default value")
Run Code Online (Sandbox Code Playgroud)

小智 19

要在字段中显示默认值,您必须在htmlAttributes中为其指定"Value"属性,如下例所示:

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

确保V in Value为大写.

这样,您只需在html字段上分配默认值,而不是在模型中.

在模型中分配默认值会强制您首先创建模型对象,并为非可空字段(如日期时间)设置默认值,这将使页面显示嘈杂的1/1/1001 00:00:00值您可以在模型的其余部分中使用的日期时间字段.

  • 谢谢,这就是我要找的。大写 V 得到了我。他们为什么要这样不一致? (2认同)

jav*_*iry 12

最简单的方法是在模型构造函数中初始化属性:

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; }
}
Run Code Online (Sandbox Code Playgroud)

当你想将它发送到视图时,例如在PersonController.Createaction-method中:

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

[HttpPost]
public ActionResult Create(PersonModel model) {
    // do something on post-back 
}
Run Code Online (Sandbox Code Playgroud)

这就对了.请记住,您必须创建模型的新实例并将其传递给视图以使用它的默认值.因为与此操作方法关联的视图需要一个PersonModel实例,但是当您使用这样的create方法时:

public ActionResult Create() {
    return View();
}
Run Code Online (Sandbox Code Playgroud)

视图没有任何意义(我的意思是null),所以你的默认值实际上并不存在.

但是如果你想为复杂的目的做这件事,例如使用默认值作为水印,或者如@JTMon所说,你不希望最终用户看到默认值,你将有其他一些解决方案.请让我知道你的目的.


JTM*_*Mon 0

如何将模型定义为其某些属性具有“默认值”?在这种情况下,您不需要做任何特别的事情。如果这不令人满意(例如,您不希望用户在屏幕上看到“默认值”),您可以为该模型创建一个继承自 DefaultModelBinder 的自定义模型绑定器,仅重写 OnModelUpdated 方法,在其中执行以下操作大致如下:

model.somthg = string.IsNullOrEmpty(model.somthing) ? "Default Value" : model.somthing
Run Code Online (Sandbox Code Playgroud)

另请注意,据我所知,EditorFor 会忽略您发送给它的自定义 html 属性。