控制器从表单 ASP.NET MVC5 接收空值
Controller receiving null values from a form 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.log(data);
$.each(data, function (index, row) {
$("#Branch").append("<option value='" + row.Id + "'>" + row.Name + "</option>")
});
});
});
一切正常,但是当我 post 整个表格
@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>
我收到分支空值
当我在浏览器中打开网络时,我可以看到传递的值
并且模型 Class
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}");
}
}
}
调试时我可以看到指向模型的点 class 并将分支设置为空值
我很困惑
谢谢
Branch 是内置模型绑定器一无所知的 class,您将不得不编写一个 custom model binder 将 Branch 发布的值转换为 Branch
实例或将模型中的 Branch 转换为 string
或 int
:
public string Branch { get; set; }
我有两个来自市场及其分支机构的下拉菜单,所以我在选择市场时创建了它,它在分支机构下拉菜单中加载了它的分支机构
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>")
});
});
});
一切正常,但是当我 post 整个表格
@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>
我收到分支空值
当我在浏览器中打开网络时,我可以看到传递的值
并且模型 Class
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}");
}
}
}
调试时我可以看到指向模型的点 class 并将分支设置为空值 我很困惑 谢谢
Branch 是内置模型绑定器一无所知的 class,您将不得不编写一个 custom model binder 将 Branch 发布的值转换为 Branch
实例或将模型中的 Branch 转换为 string
或 int
:
public string Branch { get; set; }