Контроллер, принимающий нулевые значения из формы ASP.NET MVC5 - PullRequest
2 голосов
/ 20 марта 2019

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

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.log(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>

, я получаю нулевое значение ветви enter image description here

когда я открываю сеть в браузере, я вижу переданные значения enter image description here

, а также то, что во время отладки класс модели

    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}");
        }
    }
}

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

1 Ответ

2 голосов
/ 20 марта 2019

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

public string Branch { get; set; }

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