MVC 3 - Проверка списка клиентов - PullRequest
4 голосов
/ 14 февраля 2011

У меня есть следующее Модель

public class ProductLang
{
  public int productID { get; set; }

  public int langID { get; set; }

  [Required, StringLength(150)]
  public string name { get; set; }

  [AllowHtml]
  public string description { get; set; }
}

Контроллер

public ActionResult Edit(int id)
{
  return View(_db.Products.FirstOrDefault(p => p.id.Equals(id)).ProductLangs);
}

Вид

@model IEnumerable<ProductLang>

@using (Html.BeginForm()) {
  @Html.ValidationSummary(true)
  @Html.Hidden("id", Model.FirstOrDefault().productID)

  @foreach (var productLang in Model) {
    <div>
      @Html.Hidden("prodLang.Index", productLang.idLingua)
      @Html.Hidden("prodLang[" + productLang.langID + "].productID", productLang.productID)
      @Html.Hidden("prodLang[" + productLang.langID + "].langID", productLang.langID)

      <div class="editor-label">
        @Html.Label("prodLang" + productLang.langID + "__nome", "Name")
      </div>
      <div class="editor-field">
        @Html.TextBox("prodLang[" + productLang.langID + "].name", productLang.name)
        @Html.ValidationMessage("prodLang[" + productLang.langID + "].name")
      </div>
      <div class="editor-label">
        @Html.Label("prodLang" + productLang.langID + "__description", "Description")
      </div>
      <div class="editor-field">
        @Html.TextArea("prodLang[" + productLang.langID + "].description", productLang.description)
      </div>
    </div>
  } 

  <input type="submit" value="EDIT" />
}

У меня есть другие представления и контроллер, где работает ненавязчивая проверка jquery, но не здесь.Я предполагаю, потому что у меня есть список.На самом деле, если я сделал вид только с одним объектом, работает.

Как я могу связать ненавязчивую проверку jquery со списком?

1 Ответ

4 голосов
/ 15 февраля 2011

Вместо того, чтобы писать эти уродливые циклы foreach и пытаться найти подходящие имена для ваших входов в вашем представлении, вы можете рассмотреть возможность использования шаблона редактора, поскольку это сделает ваше представление намного более простым:

@model IEnumerable<ProductLang>
@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)
    @Html.Hidden("id", Model.FirstOrDefault().productID)
    @Html.EditorForModel()
    <input type="submit" value="EDIT" />
}

, а затем внутри соответствующего шаблона редактора (~/Views/Home/EditorTemplates/ProductLang.cshtml):

@model ProductLang
<div>
    @Html.HiddenFor(x => x.idLingua)
    @Html.HiddenFor(x => x.productID)
    @Html.HiddenFor(x => x.langID)

    <div class="editor-label">
        @Html.LabelFor(x => x.name, "Name")
    </div>
    <div class="editor-field">
        @Html.TextBoxFor(x => x.name)
        @Html.ValidationMessageFor(x => x.name)
    </div>
    <div class="editor-label">
        @Html.LabelFor(x => x.description, "Description")
    </div>
    <div class="editor-field">
        @Html.TextAreaFor(x => x.description)
    </div>
</div>

Теперь вы обнаружите, что все автоматически происходит на своем месте: исправьте соглашение об именах, чтобы при обратной передаче механизм связывания модели по умолчанию мог восстановить модель представления, работающую проверку на стороне клиента и на сервере, чистые представления, счастливые пользователи: -)

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