Ненавязчивый javascript, добавляющий данные в @Html.HiddenFor

У меня есть скрытое поле в форме, созданной в Razor с помощью помощника @Html.HiddenFor:

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

Моя модель View выглядит так:

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>
}

Откуда он получает эти метаданные и как я могу это остановить?


person BKahuna    schedule 12.11.2011    source источник


Ответы (1)


Он помечен как таковой, поскольку тип в модели представления — int.

Он добавляет html из-за этой строки:

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

Почему проблема в наличии дополнительных атрибутов? Если это действительно проблематично, попробуйте изменить тип BidId на int? (целое число, допускающее значение NULL).

person Rich O'Kelly    schedule 12.11.2011
comment
Спасибо за ответ - нет, это не оказалось проблемой, но я еще не закончил подключение всей проверки. Просто мне показалось небрежным иметь все эти дополнительные вещи в области, где это не имело смысла. Ваша идея сделать его обнуляемым кажется простым решением, если это действительно вызывает проблемы в будущем. - person BKahuna; 12.11.2011