Asp.net MVC: дополнительные поля не являются обязательными для удаленной проверки - PullRequest
0 голосов
/ 11 января 2019

У меня есть список моделей и я хочу выполнить удаленную проверку.

Модель:

[System.Web.Mvc.Remote("Method", "Controller", HttpMethod = "POST", AdditionalFields = "prop2,prop3", ErrorMessage = "Error")]
 public string prop1 { get; set; }

Имя, сгенерированное MVC для каждого элемента, выглядит следующим образом:

<input type='text' name='test[0].prop1' />

Из-за этого значения не привязываются к параметрам. Я получил помощь от этого сообщения . Теперь я получаю значение для «prop1», но все еще «prop2» и «prop3» не связываются.

Редактировать: я использую BeginCollectionItem для визуализации элементов списка.

Любая помощь или предложение было бы здорово.

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 12 января 2019

Если удаленный метод принимает объект (в качестве параметра), который содержит его подэлементы, они должны отображаться автоматически, например:

public class Stuff
{
  public List<Item> Items { get; set; }
}

public class Item
{
  [Remote(action:"Validate", controller: "Account", 
      HttpMethod = "POST", 
      ErrorMessage = "Error",
      AdditionalFields = "Prop2,Prop3")]
  public string Prop1 { get; set; }

  public string Prop2 { get; set; }
  public string Prop3 { get; set; }
}
@using (Html.BeginForm("Index", "Account"))
{
  for (int i = 0; i < Model.Items.Count; i++)
  {
    @Html.TextBoxFor(m => Model.Items[i].Prop1)
    @Html.TextBoxFor(m => Model.Items[i].Prop2)
    @Html.TextBoxFor(m => Model.Items[i].Prop3)
  }
}

enter image description here

0 голосов
/ 12 января 2019

Я взял идею из этого поста и исправил ее, изменив файл remote method in jquery-validate.js, как показано ниже:

remote: function(value, element, param) {
 ....
  param = typeof param === "string" && {url:param} || param;
  ....

  for (var property in param.data) {
    if (param.data.hasOwnProperty(property)) {
        param.data[property.substr(property.lastIndexOf(".") + 1)] = param.data[property];
      }
    }
   //ajax call
0 голосов
/ 11 января 2019

По умолчанию все свойства модели равны нулю, кроме основного свойства,

Если у вас есть другие свойства для проверки Bind, включите их.

public ActionResult CheckThings([Bind(Include = "prop2,prop3")] Model model)
{
.....
}

Если ваш метод действия не принимает модель и вы передаете ей отдельные поля, используйте

public ActionResult CheckThings([Bind(Prefix = "Prop1OrSomethigElse")]string prop1, [Bind(Prefix = "Prop2OrSomethigElse")]string prop2, [Bind(Prefix = "Prop3OrSomethigElse")]string prop3)
{
.....
}
...