1

我有一个在剃刀使用@Html.HiddenFor助手创建窗体上的隐藏字段:非侵入式JavaScript将数据添加到@ Html.HiddenFor

@Html.HiddenFor(model => model.BidID, new { id="bidItemID" }) 

我的视图模式是这样的:

public class BidEditVM 
{ 
    [Display(Name = "Bid ID")] 
    public int BidID { get; set; } 

    [StringLength(51)] 
    [Display(Name = "Customer Name")] 
    public string CustomerName { get; set; } 

    [StringLength(75)] 
    [Display(Name = "Bid Name")] 
    public string BidName { get; set; } 

    [Display(Name = "Amount")] 
    public decimal Amount { get; set; } 

    [Display(Name = "Time")] 
    public DateTime BidTime { get; set; } 
} 

HTML呈现时,不引人注意的JavaScript将它添加到隐藏的输入字段中,即使它永远不会需要验证:

<input id="bidItemID" type="hidden" value="5198" name="BidID" data-val-required="The Bid ID field is required." data-val-number="The field Bid ID must be a number." data-val="true"> 

奇怪的是,它添加的消息和验证甚至不是该局部视图的视图模型的一部分。视图看起来是这样的:

@model AuctionAdmin.Models.ViewModels.BidEditVM 

@using (Ajax.BeginForm("UpdateBid", new AjaxOptions { HttpMethod = "Post", UpdateTargetId = "modalBidInfo" })) 
{ 
    @Html.ValidationSummary(true) 
    @Html.HiddenFor(model => model.BidID, new { id="bidItemID" }) 

    <fieldset> 
     <legend>Edit Bid</legend> 

     <div class="display-label">@Html.LabelFor(model => model.CustomerName)</div> 
     <div class="display-field"> 
      @Html.DisplayFor(model => model.CustomerName) 
     </div> 

     <div class="display-label">@Html.LabelFor(model => model.BidName)</div> 
     <div class="display-field"> 
      @Html.DisplayFor(model => model.BidName) 
     </div> 

     <div class="editor-label">@Html.LabelFor(model => model.Amount)</div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.Amount) 
     </div> 

     <div class="editor-label">@Html.LabelFor(model => model.BidTime)</div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.BidTime) 
     </div> 
    </fieldset> 
} 

它是在哪里得到这个元数据,我怎么能阻止它?

回答

1

它被标记为这样,因为视图模型中的类型是int。

它添加HTML由于这一行:

@Html.HiddenFor(model => model.BidID, new { id="bidItemID" }) 

为什么一个问题,即额外的属性存在? 如果它确实有问题,请尝试将BidId的类型更改为int? (一个可为空的int)。

+0

感谢您的回应 - 不,它没有被证明是有问题的,但我还没有完成所有的验证连线。在一个没有任何意义的领域里,看起来很渺茫。如果它确实会导致问题出现,那么将其设置为空的想法似乎是一个简单的解决方法。 – BKahuna