停止EditorFor<>从添加0到int属性

时间:2014-03-19 18:03:35

标签: c# asp.net-mvc default-value

我有一个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>

这与禁用模型绑定无关。我想在视图中放置数据以填充下拉列表,并且还需要在帖子上绑定到它的所有数据以在控制器中操作它。

3 个答案:

答案 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的情况下执行此操作。