#asp.net-mvc #viewmodel #unobtrusive-javascript #hidden-field
#asp.net-mvc #viewmodel #ненавязчивый-javascript #скрытое поле
Вопрос:
У меня есть скрытое поле в форме, которая создается в Razor с помощью @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).
Комментарии:
1. Спасибо за ответ — нет, это не оказалось проблематичным, но я не закончил подключать всю проверку. Просто казалось небрежным иметь все эти дополнительные материалы в области, где это не имело никакого смысла. Ваша идея сделать его обнуляемым кажется простым решением, если это вызовет проблемы в будущем.