C # ASP.NET Передача модели в методе post при изменении выпадающего списка - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь передать мою модель при изменении DropDownList в моем коде Razor, но информация о моей модели не передается методу post, даже если вызывается метод post.

В моей бритве:

@model Namespace.Models.MyModel

@using (Html.BeginForm("myFunc", "Home", FormMethod.Post, new { myModel = Model }))
{
    @Html.DropDownListFor(m => m.SelectedType, new SelectList(Model.Types, "Id", "Desc", Model.SelectedType), new { @class = "form-control", style = "display: inline;", @onchange = "this.form.submit()" })
}

Моя модель:

public class MyModel
{
    public List<myData> myList = new List<myData>();
    public List<myType> Types = new List<myType>();
    public string SelectedType;
}

Мой контроллер:

[HttpPost]
public ActionResult myFunc(MyModel myModel)
{
    //do stuff
}

Если я установлю точку останова в myFunc, я смогу увидеть, как она вступает туда при изменении моего DropDownList, но информация о модели не передается функции. Я уверен, что то, что мне не хватает, возможно, незначительное, но я просто не вижу этого.

Визуализированный HTML-код:

<form action="/Home/myFunc" myModel="Namespace.Models.MyModel" method="post">
   <select class="form-control" id="SelectedType" name="SelectedType" onChange="(this.form).submit()" style="display: inline;">
      <option selected="selected" value="FT">Fault</option>
      <option value="QY">Query</option>
      <option value="RQ">PM Request</option>
   </select>
</form>

1 Ответ

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

По умолчанию он просматривает только общие свойства, а не поля.

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

https://docs.microsoft.com/en-us/aspnet/core/mvc/models/model-binding?view=aspnetcore-2.2

public class MyModel
{
    public List<myData> myList = new List<myData>();
    public List<myType> Types = new List<myType>();
    public string SelectedType;
}

Я заставил его работать, сменив модель с верхней на нижнюю.

public class MyModel
{
    public List<myData> myList {get;set;}
    public List<myType> Types{get;set;}
    public string SelectedType {get;set;}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...