Контроллер, получающий нулевые значения из формы ASP.NET MVC5

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

HTML-дизайн

<div style = "width : 50%">
        <div class = "form-group" style = "display:inline-block">
            @Html.LabelFor(m => m.Market)
            @Html.DropDownListFor(m => m.Market, new SelectList(Model.Markets, "Id", "Name"), "Select Market", new { @class = "form-control" })
        </div>
        <div class = "form-group" style = "float:right">
            @Html.LabelFor(m => m.Branch)
            @Html.DropDownListFor(m => m.Branch, new SelectList("", "Id", "Name"), "Select Branch", new { @class = "form-control" })
        </div>
    </div>

и этот ajax для загрузки веток

 $(function () {
    $("#Market").on("change", function () {
        $.get("/Home/GetBranches", { id: $("#Market").val() }, function (data) {
            $("#Branch").empty();
            console.info(data);
            $.each(data, function (index, row) {
                $("#Branch").append("<option value='" + row.Id + "'>" + row.Name + "</option>")
            });
        });
    });

и все работает хорошо, но когда я публикую всю форму

   @using (Html.BeginForm("Index", "Home", FormMethod.Post))
{

    <div style = "width : 50%">
        <div class = "form-group" style = "display:inline-block">
            @Html.LabelFor(m => m.Market)
            @Html.DropDownListFor(m => m.Market, new SelectList(Model.Markets, "Id", "Name"), "Select Market", new { @class = "form-control" })
        </div>
        <div class = "form-group" style = "float:right">
            @Html.LabelFor(m => m.Branch)
            @Html.DropDownListFor(m => m.Branch, new SelectList("", "Id", "Name"), "Select Branch", new { @class = "form-control" })
        </div>
    </div>

    <input class='datepicker' />

    <div style = "width: 50%">
        <div class = "form-group" style = "display:inline-block">
            @Html.LabelFor(m => m.Date)
            @Html.TextBoxFor((m => m.Date), new { @class = "form-control form-inline datepicker", placeholder = "eg 1 Jan 2018" })
            @Html.ValidationMessageFor(m => m.Date)
        </div>
        <div class = "form-group" style = "float:right">
            @Html.LabelFor(m => m.Time)
            @Html.TextBoxFor(m => m.Time, new { @class = "form-control form-inline", placeholder = "hh:mm" })
            @Html.ValidationMessageFor(m => m.Time)
        </div>
    </div>

    <div class = "form-group">
        @Html.LabelFor(m => m.CustName)
        @Html.TextBoxFor(m => m.CustName, new { @class = "form-control fouc" })
        @Html.ValidationMessageFor(m => m.CustName)
    </div>
    <div class = "form-group">
        @Html.LabelFor(m => m.OrderNumber)
        @Html.TextBoxFor(m => m.OrderNumber, new { @class = "form-control" })
        @Html.ValidationMessageFor(m => m.OrderNumber)
    </div>
    <div class = "form-group">
        @Html.LabelFor(m => m.Total)
        @Html.EditorFor(m => m.Total, new { htmlAttributes = new { @class = "form-control" } })
        @Html.ValidationMessageFor(m => m.Total)
    </div>
    <div class = "form-group">
        @Html.LabelFor(m => m.CouponValue)
        @Html.EditorFor(m => m.CouponValue, new { htmlAttributes = new { @class = "form-control" } })
        @Html.ValidationMessageFor(m => m.CouponValue)
    </div>
    <div class = "form-group">
        @Html.LabelFor(m => m.Notes)
        @Html.TextBoxFor(m => m.Notes, new { @class = "form-control" })
        @Html.ValidationMessageFor(m => m.Notes)
    </div>
    <button type = "submit" class = "btn btn-primary btn-lg">Save</button>

я получаю нулевое значение ветки Контроллер, получающий нулевые значения из формы ASP.NET MVC5

когда я открываю сеть в браузере, я вижу переданные значения Контроллер, получающий нулевые значения из формы ASP.NET MVC5

и что класс модели

    using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
using Takers.Models;

namespace Takers.ViewModel
{
    public class OrderView
    {
        [Required]
        public string OrderNumber { get; set; }

        [Required]
        public string CustName { get; set; }

        [Required]
        public decimal CouponValue { get; set; }

        [Required]
        public string Notes { get; set; }

        [Required]
        public string UserName { get; set; }

        [Required]
        public decimal Total { get; set; }

        public string Time { get; set; }

        public string Date { get; set; }

        public Market Market { get; set; }

        public Branch Branch { get; set; }

        public ICollection<Market> Markets { get; set; }

        public ICollection<Branch> Branches { get; set; }

        public DateTime GetDateTime()
        {
            return DateTime.Parse($"{Date} {Time}");
        }
    }
}

во время отладки я вижу, что точка переходит в класс модели и устанавливает ветвь с нулевым значением я весьма озадачен Спасибо

как выглядит ваш класс филиала?

Ryan Schlueter 20.03.2019 15:48
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
1
413
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Branch — это класс, о котором встроенные связыватели модели ничего не знают, вам придется написать переплет нестандартной модели, который преобразует отправленное значение Branch в экземпляр Branch или конвертирует Branch в вашей модели в string или int:

public string Branch { get; set; }

поэтому вместо того, чтобы получить объект ветки, получите идентификатор ветки, и с помощью лямбда я могу получить ветку в контроллере

Abdelrhman Elsaid 20.03.2019 15:44

Для большей части, да.

mxmissile 20.03.2019 15:46

Другие вопросы по теме