ASP.NET MVC中TextBoxFor的默认值

roa*_*oul 5 c# asp.net asp.net-mvc razor asp.net-mvc-3

在ASP.NET MVC中,我在下面编写了代码,为文本框提供了一个初始值:

@Html.TextBoxFor(p => p.WEIGHT, new { tabindex = "140", 
                                      @class = "mustInputText noime  w50", 
                                      maxlength = "8", @Value = "0", 
                                      rule = "InputOnlyNum" })
Run Code Online (Sandbox Code Playgroud)

而Html源代码如下:

<input Value="0" class="mustInputText noime  w50" id="WEIGHT" maxlength="8" 
    name="WEIGHT" rule="InputOnlyNum" tabindex="140" type="text" value="" />
Run Code Online (Sandbox Code Playgroud)

我注意到"input"标签中有两个Value属性: Value="0"value=""

如何使它只显示一个值属性?

小智 7

使用TextBox而不是TextBoxFor

@Html.TextBox("WEIGHT", Model.WEIGHT ?? "0", new {...})
Run Code Online (Sandbox Code Playgroud)

或者如果WEIGHT是一个空字符串

@Html.TextBox("WEIGHT", Model.WEIGHT == "" ? "0" : Model.WEIGHT, new {...})
Run Code Online (Sandbox Code Playgroud)


Bry*_*ong 5

这似乎是默认行为.如果您真的想避免使用双值属性,最好通过在控制器类的create方法中设置默认值来遵循更清洁的方法.这遵循MVC模式的意识形态.

//GET
public ActionResult CreateNewEntity()
{
    YourEntity newEntity= new YourEntity ();
    newEntity.WEIGHT= 0;

    return View(newEntity);
}
Run Code Online (Sandbox Code Playgroud)

然后在您的视图中,您将不再需要使用value属性:

@Html.TextBoxFor(p => p.WEIGHT, new { tabindex = "140", 
                                      @class = "mustInputText noime  w50",     
                                      maxlength = "8", 
                                      rule = "InputOnlyNum" })
Run Code Online (Sandbox Code Playgroud)

你得到的html是:

<input class="mustInputText noime  w50" 
       id="WEIGHT" 
       maxlength="8" 
       name="WEIGHT" 
       rule="InputOnlyNum" 
       tabindex="140" 
       type="text" 
       value="0" />
Run Code Online (Sandbox Code Playgroud)