Имам ново приложение MVC 4 с доста основен изглед/контролер. Свързаният модел съдържа няколко свойства, които съм съпоставил към Скрити полета на формуляр. Когато страницата се визуализира за първи път (напр. чрез действието HttpGet), всичко изглежда добре. Но когато формулярът се публикува чрез избиране на бутона Изпращане, полученият модел, представен на действието, вече няма зададени стойности на скрити полета. Ето преглед на подробностите.
Ето примерен модел:
public class Application
{
public bool ShowSideBars { get; set; }
}
Ето първоначалното Контролер *Действие* (което изглежда работи добре):
[HttpGet]
public ActionResult Application()
{
var model = Request.ParseFromQueryString<Application>();
model.ShowSideBars = true;
return View(model);
}
Това се съпоставя с Изглед, както следва:
<fieldset>
@Html.HiddenFor(m => m.ShowSideBars)
...
</fieldset>
Това води до следното маркиране, което да бъде изобразено в набора от полета:
<input data-val="true" data-val-required="The ShowSideBars field is required." id="ShowSideBars" name="ShowSideBars" type="hidden" value="True" />
Забележка: Наистина ми се иска да знам защо MVC реши да добави съдържанието „...полето е задължително“, когато не съм го маркирал като задължително, но това е за друг въпрос em>
Ето действието, което се извиква при изпращане на формуляра. В този момент гореспоменатото свойство вече няма да бъде зададено на „true“.
[HttpPost]
public ActionResult Application(Application application)
{
// Other work done here
return View(application);
}
Понастоящем няма персонализирани Binders за модели. Освен това тествах някои други типове данни и виждам същото.
Може ли някой да обясни защо скритите стойности на формуляра не се връщат? Дали просто правя всичко това погрешно?
data-val-required
се изобразява, защото типът на модела еbool
. Bools по подразбиране са задължителни, те трябва да са true или false. Ако не искате да виждате data-val-required, направете свойствотоbool?
. - person danludwig   schedule 19.03.2012