Пост-действие MVC ViewModel возвращается как NULL - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь отправить значения формы обратно в контроллер.Но в действии я получаю ViewModel как ноль.Вот ViewModel

public class CommunicationDetailsViewModel
{
    public string OrganizationName { get; set; }
    public List<Country> Country { get; set; }

    public List<State> State { get; set; }

    public List<City> City { get; set; }

    [Display(Name = "Id")]
    public int CountryId { get; set; }

    [Display(Name = "Id")]
    public int StateId { get; set; }

    [Display(Name = "Id")]
    public int CityId { get; set; }

    [StringLength(32), Required(ErrorMessage ="Address is required")]
    public string Address { get; set; }

    [StringLength(32), Required(ErrorMessage = "Building name is required")]
    public string BuildingName { get; set; }
}

Ниже приведено действие контроллера:

[HttpPost]
public ActionResult Save(CommunicationDetailsViewModel communicationDetailsViewModel)
{
        return View();
}

Имеет ли это отношение к интерфейсу Kendo для MVC?Потому что это первый раз, когда я использую Kendo UI.Ниже приведен вид:

    @model WebAPI.ViewModels.CommunicationDetailsViewModel
@{
    ViewBag.Title = "Supplier Information";
}

<h4>Supplier Details</h4>

@using (Html.BeginForm("Save", "SupplierInformation", FormMethod.Post ))
{
    <div class="demo-section k-content">
        <div class="form-group">
            @Html.Label("Organization name")
            @Html.Kendo().TextBoxFor(model => model.OrganizationName).Name("txtOrganization").HtmlAttributes(new { @class = "k-textbox required", placeholder = "Organization Name" })
        </div>
        <div class="form-group">
            @Html.Label("Country")
            @(Html.Kendo().DropDownList().Name("ddlCountry").DataTextField("CountryName").DataValueField("Id").BindTo(Model.Country))
        </div>
        <div class="form-group">
            @Html.Label("State")
            @(Html.Kendo().DropDownList().Name("ddlState").DataTextField("StateName").DataValueField("Id").BindTo(Model.State))
        </div>
        <div class="form-group">
            @Html.Label("City")
            @(Html.Kendo().DropDownList().Name("ddlCity").DataTextField("CityName").DataValueField("Id").BindTo(Model.City))
        </div>
        <div class="form-group">
            @Html.Label("Address")
            @Html.Kendo().TextBoxFor(model => model.Address).Name("txtAddress").HtmlAttributes(new { @class="k-textbox required", placeholder="Address", @maxlength = "32" })
        </div>
        <div class="form-group">
            @Html.Label("Building name")
            @Html.Kendo().TextBoxFor(model => Model.BuildingName).Name("txtBuildingName").HtmlAttributes(new { @class = "k-textbox required", placeholder = "Address", @maxlength = "32" })
        </div>
    </div>
    @Html.Kendo().Button().Name("btnSave").Content("Save").HtmlAttributes(new { type = "submit", @class = "k-button k-primary" })

}

И что интересно, если я использую FormCollection вместо моей ViewModel, я могу получить значения в действии.
Чего мне не хватаетВот?Должно быть что-то глупое.Любая помощь приветствуется.

1 Ответ

0 голосов
/ 24 октября 2018

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

Например, вы используете

    @Html.Kendo().TextBoxFor(model => model.OrganizationName).Name("txtOrganization").HtmlAttributes(new { @class = "k-textbox required", placeholder = "Organization Name" })

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

    @Html.Kendo().TextBoxFor(model => model.OrganizationName).Name("OrganizationName").HtmlAttributes(new { @class = "k-textbox required", placeholder = "Organization Name" })
...