Asp.net mvc 3 无法将下拉列表中的数据添加到表中
我正在asp.net中使用nhibernate和mvc3 我正在尝试将数据添加到表中,其中我的表架构如下所示:Asp.net mvc 3 无法将下拉列表中的数据添加到表中,asp.net-mvc-3,nhibernate,html.dropdownlistfor,Asp.net Mvc 3,Nhibernate,Html.dropdownlistfor,我正在asp.net中使用nhibernate和mvc3 我正在尝试将数据添加到表中,其中我的表架构如下所示: public class HobbyMasters { [Key] public virtual int HobbyId { get; set; } [Required(ErrorMessageResourceType = typeof(Resources), ErrorMessageResourceName = "NameRequired")] p
public class HobbyMasters
{
[Key]
public virtual int HobbyId { get; set; }
[Required(ErrorMessageResourceType = typeof(Resources), ErrorMessageResourceName = "NameRequired")]
public virtual string HobbyName { get; set; }
public virtual HobbyTypes HobbyType { get; set; }
[Required]
public virtual string HobbyDetails { get; set; }
[Required]
public virtual ICollection<HobbyMasters> HobbyNames { get; set; }
}
public class HobbyTypes
{
[Key]
public virtual int HobbyTypeId { get; set; }
[Required]
public virtual string HobbyType { get; set; }
public virtual ICollection<HobbyTypes> Hobby { get; set; }
}
公共类业余爱好者
{
[关键]
公共虚拟整数HobbyId{get;set;}
[必需(ErrorMessageResourceType=typeof(资源),ErrorMessageResourceName=“NameRequired”)]
公共虚拟字符串HobbyName{get;set;}
公共虚拟HobbyTypes HobbyType{get;set;}
[必需]
公共虚拟字符串hobbydeails{get;set;}
[必需]
公共虚拟ICollection HobbyNames{get;set;}
}
公共类哈比类型
{
[关键]
公共虚拟int HobbyTypeId{get;set;}
[必需]
公共虚拟字符串HobbyType{get;set;}
公共虚拟ICollection嗜好{get;set;}
}
在我的控制器中
public ActionResult Create()
{
ViewBag.c1 = (ICollection<HobbyTypes>)(new Hobby_MasterService().GetAllHobbyTypes());
return View();
}
//
// POST: /Hobbies/Create
[HttpPost]
public ActionResult Create(HobbyMasters hobby)
{
ViewBag.c1 = (ICollection<HobbyTypes>)new Hobby_MasterService().GetAllHobbyTypes();
try
{
if (ModelState.IsValid)
{
new Hobby_MasterService().SaveOrUpdateHobby(hobby);
return RedirectToAction("Index");
}
}
}
public ActionResult Create()
{
ViewBag.c1=(ICollection)(新爱好_MasterService().GetAllHobbyTypes());
返回视图();
}
//
//发布/爱好/创建
[HttpPost]
公共行动结果创建(业余爱好者爱好者业余爱好)
{
ViewBag.c1=(ICollection)新爱好_MasterService().GetAllHobbyTypes();
尝试
{
if(ModelState.IsValid)
{
新嗜好_MasterService().SaveOrUpdateHobby(嗜好);
返回操作(“索引”);
}
}
}
他认为:
@using (Html.BeginForm("Create", "Hobbies", FormMethod.Post))
{
@Html.ValidationSummary(true)
<fieldset>
<legend>Hobby Master</legend>
<div class="editor-label">
@Html.LabelFor(model => model.HobbyName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.HobbyName)
@Html.ValidationMessageFor(model => model.HobbyName)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.HobbyType)
</div>
<div class="Editor-field">
@Html.DropDownListFor(model =>model.HobbyType.HobbyTypeId, new SelectList(ViewBag.c1, "HobbyTypeId", "HobbyType"), "-- Select --")
@Html.ValidationMessageFor(model => model.HobbyType)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.HobbyDetails)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.HobbyDetails)
@Html.ValidationMessageFor(model => model.HobbyDetails)
</div>
</fieldset>
<p><input type="Submit" value="Create" /> </p>
}
@使用(Html.BeginForm(“创建”、“爱好”、FormMethod.Post))
{
@Html.ValidationSummary(true)
爱好大师
@LabelFor(model=>model.HobbyName)
@EditorFor(model=>model.HobbyName)
@Html.ValidationMessageFor(model=>model.HobbyName)
@LabelFor(model=>model.HobbyType)
@DropDownListFor(model=>model.HobbyType.HobbyTypeId,新的选择列表(ViewBag.c1,“HobbyTypeId”,“HobbyType”),“--Select--”)
@Html.ValidationMessageFor(model=>model.HobbyType)
@LabelFor(model=>model.hobbydeails)
@EditorFor(model=>model.hobbydeails)
@Html.ValidationMessageFor(model=>model.hobbydeails)
}
显然,我发现我的Modelstate.IsValid总是false。。。。。
因为它只存储HobbyId,而获取Hobby类型为null,所以HobbyMasters hobbytype对象。。。。。
dnt knw我出错的地方可能是dropdownlist或其他内容。。。。。
请尽快帮助我:(您的代码有几个问题:
- 首先,您使用
属性装饰了HobbyNames集合属性。您应该仅在简单属性上使用此属性。事实上,您可以保留该属性,但它绝对没有效果[Required]
- 代码的第二个问题是,您使用
属性修饰了[必需]
模型的HobbyTypes
字符串属性,但您从未在视图中使用此属性。因此,提交表单时不会发送任何值,并且您的模型无效HobbyType
- 代码的另一个问题是,您将下拉列表绑定到了
属性。但是model=>model.HobbyType.HobbyTypeId
不是可为空的类型。但是您使下拉列表包含默认值:HobbyTypeId
。这是不可能的。如果您希望有一个带有可选值的下拉列表,则必须将其绑定到模型上的可空属性“--选择--”
public class HobbyMasters
{
public virtual int HobbyId { get; set; }
[Required]
public virtual string HobbyName { get; set; }
public virtual HobbyTypes HobbyType { get; set; }
[Required]
public virtual string HobbyDetails { get; set; }
public virtual ICollection<HobbyMasters> HobbyNames { get; set; }
}
public class HobbyTypes
{
[Required]
public virtual int? HobbyTypeId { get; set; }
public virtual string HobbyType { get; set; }
public virtual ICollection<HobbyTypes> Hobby { get; set; }
}
公共类业余爱好者
{
公共虚拟整数HobbyId{get;set;}
[必需]
公共虚拟字符串HobbyName{get;set;}
公共虚拟HobbyTypes HobbyType{get;set;}
[必需]
公共虚拟字符串hobbydeails{get;set;}
公共虚拟ICollection HobbyNames{get;set;}
}
公共类哈比类型
{
[必需]
公共虚拟int?HobbyTypeId{get;set;}
公共虚拟字符串HobbyType{get;set;}
公共虚拟ICollection嗜好{get;set;}
}
控制器:
public class HomeController : Controller
{
public ActionResult Create()
{
ViewBag.c1 = (ICollection<HobbyTypes>)(new Hobby_MasterService().GetAllHobbyTypes());
var model = new HobbyMasters();
return View(model);
}
//
// POST: /Hobbies/Create
[HttpPost]
public ActionResult Create(HobbyMasters hobby)
{
if (ModelState.IsValid)
{
try
{
new Hobby_MasterService().SaveOrUpdateHobby(hobby);
return RedirectToAction("Index");
}
catch (Exception ex)
{
ModelState.AddModelError("", ex.Message);
}
}
ViewBag.c1 = (ICollection<HobbyTypes>)new Hobby_MasterService().GetAllHobbyTypes();
return View(hobby);
}
}
公共类HomeController:控制器
{
公共操作结果创建()
{
ViewBag.c1=(ICollection)(新爱好_MasterService().GetAllHobbyTypes());
var模型=新的HobbyMasters();
返回视图(模型);
}
//
//发布/爱好/创建
[HttpPost]
公共行动结果创建(业余爱好者爱好者业余爱好)
{
if(ModelState.IsValid)
{
尝试
{
新嗜好_MasterService().SaveOrUpdateHobby(嗜好);
返回操作(“索引”);
}
捕获(例外情况除外)
{
ModelState.addmodeleror(“,例如Message”);
}
}
ViewBag.c1=(ICollection)新爱好_MasterService().GetAllHobbyTypes();
返回视图(爱好);
}
}
视图:
@model HobbyMasters
@使用(Html.BeginForm())
{
@Html.ValidationSummary(true)
爱好大师
@LabelFor(model=>model.HobbyName)
@EditorFor(model=>model.HobbyName)
@Html.ValidationMessageFor(model=>model.HobbyName)
@LabelFor(model=>model.HobbyType)
@DropDownListFor(model=>model.HobbyType.HobbyTypeId,新的选择列表(ViewBag.c1,“HobbyTypeId”,“HobbyType”),“--Select--”)
@Html.ValidationMessageFor(model=>model.HobbyType.HobbyTypeId)
@LabelFor(model=>model.hobbydeails)
@EditorFor(model=>model.hobbydeails)
@Html.ValidationMessageFor(model=>model.hobbydeails)
}
另外,我强烈建议您使用视图模型。不要将域实体传递给视图。请定义视图模型。您可以做什么
@model HobbyMasters
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<fieldset>
<legend>Hobby Master</legend>
<div class="editor-label">
@Html.LabelFor(model => model.HobbyName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.HobbyName)
@Html.ValidationMessageFor(model => model.HobbyName)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.HobbyType)
</div>
<div class="Editor-field">
@Html.DropDownListFor(model => model.HobbyType.HobbyTypeId, new SelectList(ViewBag.c1, "HobbyTypeId", "HobbyType"), "-- Select --")
@Html.ValidationMessageFor(model => model.HobbyType.HobbyTypeId)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.HobbyDetails)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.HobbyDetails)
@Html.ValidationMessageFor(model => model.HobbyDetails)
</div>
</fieldset>
<p><input type="Submit" value="Create" /></p>
}