我有一个View模型,其中包含一些int
属性,当我在View中使用@Html.EditorFor
生成一个文本框时,它会用数字 0 <填充它/ strong>即可。 我不希望文本框预先填充任何内容,如何在不使属性可以为空的情况下停止此?
视图模型:
public class TransactionVM
{
[DisplayName("Ticket #"), DataType(DataType.Text)]
public int TicketNumber { get; set; }
[DisplayName("Customer")]
public IEnumerable<SelectListItem> Customers { get; set; }
public int CustomerId { get; set; }
[DisplayName("Carrier")]
public IEnumerable<SelectListItem> Carriers { get; set; }
public int CarrierId { get; set; }
[DisplayName("Driver")]
public IEnumerable<SelectListItem> Drivers { get; set; }
public int DriverID { get; set; }
[DisplayName("Product")]
public IEnumerable<SelectListItem> Products { get; set; }
public int ProductId { get; set; }
[DisplayName("Gross Gallons\n(Max: 6,000)")]
public decimal GrossGallons { get; set; }
[DisplayName("Net Gallons")]
public decimal NetGallons { get; set; }
[DisplayName("Sale Start Number")]
public string SaleStartNumber { get; set; }
[DisplayName("Transaction Date and Time")]
public DateTime TransactionDate { get; set; }
}
控制器:
TransactionVM model = new TransactionVM();
return View(model);
using (var db = new DynamicDbContext())
{
model.Customers = new SelectList(db.GetList<Customer>(c => c.Id > 0).ToList(), "Id", "Name");
return View(model);
}
查看:
<tr>
<td>
@Html.LabelFor(m => m.TicketNumber)
</td>
<td>
@Html.EditorFor(m => m.TicketNumber)
</td>
</tr>
这与禁用模型绑定无关。我想在视图中放置数据以填充下拉列表,并且还需要在帖子上绑定到它的所有数据以在控制器中操作它。
答案 0 :(得分:0)
我不确定并且没有尝试过,但您可以尝试设置value
这样的属性:
@Html.EditorFor(m => m.TicketNumber, new { @value = "" })
编辑:另一种方法是使用jQuery
:
<script>
$(function() {
$("#TicketNumber").val("");
});
</script>
答案 1 :(得分:0)
将[DefaultValue(null)]
DataAnnotaion添加到模型属性中。或者至少在控制器操作中设置默认值(使用[HttpGet]
)来准备页面!或者在客户端通过jQuery删除value属性。
答案 2 :(得分:0)
将model属性设置为Nullable的替代方法是直接编辑ModelState。
public ActionResult Create()
{
var model = new TransactionVM();
ModelState.SetModelValue("TicketNumber", new ValueProviderResult("", "", System.Globalization.CultureInfo.CurrentCulture));
return model;
}
您也必须小心在POST操作中执行此操作,然后仅在值为0
的情况下执行此操作。