viewmodels и ненавязчивая проверка mvc3 - PullRequest
1 голос
/ 25 апреля 2011

Я не могу заставить работать ненавязчивую проверку с использованием пользовательских моделей представления, представляющих абстракции моих сгенерированных EF классов.

Как ни стараюсь, проверка не запускает отправку формы для свойства Nameв моем городе сущность.Я считаю, что это как-то связано с различными моделями в представлениях, но я просто недостаточно знаю, как все это работает.

Пожалуйста, обратите внимание.У меня есть все последние сценарии проверки, и при просмотре страницы с помощью firebug и firequery я вижу, что сценарий добавляет и удаляет класс, допустимый из входных данных, но входные данные не являются частью коллекции проверки.

Заранее большое спасибо.

My viewModel:

/// <summary>
/// Represents abstraction of the City View that also serves in
/// data binding between the City View and the City Model.
/// </summary>
public class CityViewModel
{
    /// <summary>
    /// Gets or sets the city.
    /// </summary>
    /// <value></value>
    public City City { get; set; }

    /// <summary>
    /// Gets or sets the collection of states.
    /// </summary>
    /// <value></value>
    public ICollection<State> States { get; set; }
}

My CreateCity view:

@model OzFarmGuide.ViewModels.CityViewModel
@{
    ViewBag.Title = "Create a new city";
    Layout = "~/Views/Shared/_AdminLayout.cshtml";
}
<h2>
    Create a new city</h2>

@using (Html.BeginForm())
{
    @Html.EditorFor(model => model.City, new { States = Model.States })
    <div class="entity-actions">
        <input type="submit" value="Create" />
        |
        @Html.ActionLink("Back to List", "Cities")
    </div>
}

Мой шаблон редактора: (_ValidationPartial просто содержит ссылки на сценарии)

@model OzFarmGuide.Models.City
@Html.Partial("_ValidationPartial")
@Html.ValidationSummary(true)
<div class="editor-label">
    @Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
    @Html.TextBoxFor(model => model.Name)
    @Html.ValidationMessageFor(model => model.Name)
</div>
<div class="editor-label">
    @Html.LabelFor(model => model.State)
</div>
<div class="editor-field">
    @Html.DropDownList("StateId",
    new SelectList(ViewBag.States as System.Collections.IEnumerable,
    "StateId", "Name",
    Model.StateId))
</div>
@Html.HiddenFor(model => model.CityId)

В соответствии с указанными здесь сценариями, которые я включил:

<script src="@Url.Content("http://ajax.aspnetcdn.com/ajax/jquery.validate/1.8/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>

Ответы [ 3 ]

3 голосов
/ 10 мая 2011

Вам необходимо добавить аннотации данных [Обязательный] для всех ссылочных типов и строковых типов.Как вы упомянули, ваши классы генерируются EF.Для этого используйте класс приятеля.Посмотрите на ответ в другом подобном вопросе.

0 голосов
/ 11 мая 2011

Вы установили следующие параметры?

<configuration>
    <appSettings>
        <add key="ClientValidationEnabled" value="true"/>
        <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
    </appSettings>
</configuration>

Вы также можете включить или выключить их с помощью кода:

HtmlHelper.ClientValidationEnabled = true;
HtmlHelper.UnobtrusiveJavaScriptEnabled = true;

Кроме того, добавили ли вы какие-либо необходимые аннотации данных вВаши свойства?

Брэд Уилсон: ненавязчивая проверка

0 голосов
/ 10 мая 2011

1- Для строковых свойств вы должны добавить [Обязательно].

2- Можете ли вы проверить, если у вас есть несколько полей ввода с одинаковым именем «Имя», это может быть проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...