Asp.net mvc 提交一个列表在post中变为空+;MVC
我有一个ViewModel:Asp.net mvc 提交一个列表在post中变为空+;MVC,asp.net-mvc,asp.net-mvc-4,http-post,html-helper,form-submit,Asp.net Mvc,Asp.net Mvc 4,Http Post,Html Helper,Form Submit,我有一个ViewModel: public class RegistrationViewModel { public string Country { get; set; } public ConfigurationParamValue CountryParam { get; set; } public string Civility { get; set; } public ConfigurationParamValue CivilityParam { get;
public class RegistrationViewModel
{
public string Country { get; set; }
public ConfigurationParamValue CountryParam { get; set; }
public string Civility { get; set; }
public ConfigurationParamValue CivilityParam { get; set; }
[FirstNameValidator(Category = "Registration", IsLocal = false )]
public string FirstName { get; set; }
public ConfigurationParamValue FirstNameParam { get; set; }
[LastNameValidator(Category = "Registration", IsLocal = false)]
public string LastName { get; set; }
public List<int> Days { get; set; }
public int SelectedDay{ get; set; }
public List<Month> Months { get; set; }
public Month SelectedMonth { get; set; }
public List<int> Years { get; set; }
public int SelectedYear { get; set; }
public DateTime BirthDate { get; set; }
}
公共类注册视图模型
{
公共字符串国家{get;set;}
公共配置参数值CountryParam{get;set;}
公共字符串文明度{get;set;}
公共配置ParamValue CivilityParam{get;set;}
[FirstNameValidator(Category=“Registration”,IsLocal=false)]
公共字符串名{get;set;}
公共配置ParamValue FirstNameParam{get;set;}
[LastNameValidator(Category=“Registration”,IsLocal=false)]
公共字符串LastName{get;set;}
公共列表天数{get;set;}
public int SelectedDay{get;set;}
公共列表月份{get;set;}
公共月份SelectedMonth{get;set;}
公共列表年份{get;set;}
public int SelectedYear{get;set;}
公共日期时间出生日期{get;set;}
}
我使用此viewmodel创建视图:
@model Registration.Front.Web.Models.RegistrationViewModel
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Index</h2>
@using (Html.BeginForm()) {
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset>
<legend>RegistrationViewModel</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Country)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Country)
@Html.ValidationMessageFor(model => model.Country)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Civility)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Civility)
@Html.ValidationMessageFor(model => model.Civility)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.FirstName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.FirstName)
@Html.ValidationMessageFor(model => model.FirstName)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.LastName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.LastName)
@Html.ValidationMessageFor(model => model.LastName)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.BirthDate)
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.SelectedDay, new SelectList(Model.Days))
@Html.ValidationMessageFor(model => model.BirthDate)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Occupation)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Occupation)
@Html.ValidationMessageFor(model => model.Occupation)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.ZipCode)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.ZipCode)
@Html.ValidationMessageFor(model => model.ZipCode)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Email)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Email)
@Html.ValidationMessageFor(model => model.Email)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Password)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Password)
@Html.ValidationMessageFor(model => model.Password)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.CGV)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.CGV)
@Html.ValidationMessageFor(model => model.CGV)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Optin)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Optin)
@Html.ValidationMessageFor(model => model.Optin)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.CNIL)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.CNIL)
@Html.ValidationMessageFor(model => model.CNIL)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
@model Registration.Front.Web.Models.RegistrationViewModel
@{
ViewBag.Title=“Index”;
Layout=“~/Views/Shared/_Layout.cshtml”;
}
指数
@使用(Html.BeginForm()){
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
注册视图模型
@LabelFor(model=>model.Country)
@EditorFor(model=>model.Country)
@Html.ValidationMessageFor(model=>model.Country)
@LabelFor(model=>model.Civility)
@EditorFor(model=>model.Civility)
@Html.ValidationMessageFor(model=>model.Civility)
@LabelFor(model=>model.FirstName)
@EditorFor(model=>model.FirstName)
@Html.ValidationMessageFor(model=>model.FirstName)
@LabelFor(model=>model.LastName)
@EditorFor(model=>model.LastName)
@Html.ValidationMessageFor(model=>model.LastName)
@LabelFor(model=>model.BirthDate)
@Html.DropDownListFor(model=>model.SelectedDay,newselectlist(model.Days))
@Html.ValidationMessageFor(model=>model.BirthDate)
@LabelFor(model=>model.occulation)
@EditorFor(model=>model.occulation)
@Html.ValidationMessageFor(model=>model.occulation)
@LabelFor(model=>model.ZipCode)
@EditorFor(model=>model.ZipCode)
@Html.ValidationMessageFor(model=>model.ZipCode)
@LabelFor(model=>model.Email)
@EditorFor(model=>model.Email)
@Html.ValidationMessageFor(model=>model.Email)
@LabelFor(model=>model.Password)
@EditorFor(model=>model.Password)
@Html.ValidationMessageFor(model=>model.Password)
@LabelFor(model=>model.CGV)
@EditorFor(model=>model.CGV)
@Html.ValidationMessageFor(model=>model.CGV)
@LabelFor(model=>model.Optin)
@EditorFor(model=>model.Optin)
@Html.ValidationMessageFor(model=>model.Optin)
@LabelFor(model=>model.CNIL)
@EditorFor(model=>model.CNIL)
@Html.ValidationMessageFor(model=>model.CNIL)
}
@ActionLink(“返回列表”、“索引”)
这是我的控制器:
public ActionResult Index()
{
List<int> listDays = new List<int>(){1, 2, 3};
return View(new RegistrationViewModel() { Days=listDays });
}
[HttpPost]
public ActionResult Index( RegistrationViewModel rvm)
{
if (ModelState.IsValid)
{ return RedirectToAction("Welcome"); }
return View(rvm);
}
public ActionResult Welcome()
{
return View();
}
public ActionResult Index()
{
List listDays=新列表(){1,2,3};
返回视图(new RegistrationViewModel(){Days=listDays});
}
[HttpPost]
公共行动结果索引(RegistrationViewModel rvm)
{
if(ModelState.IsValid)
{返回重定向到操作(“欢迎”);}
返回视图(rvm);
}
公众行动结果欢迎()
{
返回视图();
}
我的问题在帖子中,viewmodel的属性天数为空!!!!!如何更正此问题?在您的视图中,您没有在表单中渲染天 使用name=“Days”类似的方式呈现窗体内的隐藏字段
foreach(var day in@Model.Days)
{
}
复制上面的代码,然后粘贴
@EditorFor(model=>model.CNIL)
@Html.ValidationMessageFor(model=>model.CNIL)
现在,当您提交时,Days值也将提交到Post方法,您将在Days列表中获得值。哪一个是day属性?你是说列表天数?是的,提交中的rvm.day为空。你在RegistrationViewModel中没有名为day的属性。您有天和选择的日期。什么属性实际返回null?属性的名称是Days,我在submit rvm.Days==nullOk中得到它,这很好。如果我们想删除视图中列表的元素,该怎么办?