Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 无法将下拉列表中的数据添加到表中_Asp.net Mvc 3_Nhibernate_Html.dropdownlistfor - Fatal编程技术网

Asp.net mvc 3 无法将下拉列表中的数据添加到表中

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

我正在asp.net中使用nhibernate和mvc3 我正在尝试将数据添加到表中,其中我的表架构如下所示:

 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或其他内容。。。。。
请尽快帮助我:(

您的代码有几个问题:

  • 首先,您使用
    [Required]
    属性装饰了HobbyNames集合属性。您应该仅在简单属性上使用此属性。事实上,您可以保留该属性,但它绝对没有效果

  • 代码的第二个问题是,您使用
    [必需]
    属性修饰了
    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>
}