Html 使用下拉菜单创建或编辑操作时转储
我已经创建/生成了这个非常简单的MVC程序(1分钟),步骤如下 1.创建MVC5 asp程序并创建新的模型类-测试模型 2.转到控制器add->scaffold并提供模型和上下文类 crud操作已生成,一切正常 我现在想要的是,当用户在性别下拉列表中点击create时,他可以选择,我写的代码来自上一篇文章,我在html下拉列表中得到了转储,我缺少什么 模型Html 使用下拉菜单创建或编辑操作时转储,html,asp.net,asp.net-mvc,asp.net-mvc-4,razor,Html,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Razor,我已经创建/生成了这个非常简单的MVC程序(1分钟),步骤如下 1.创建MVC5 asp程序并创建新的模型类-测试模型 2.转到控制器add->scaffold并提供模型和上下文类 crud操作已生成,一切正常 我现在想要的是,当用户在性别下拉列表中点击create时,他可以选择,我写的代码来自上一篇文章,我在html下拉列表中得到了转储,我缺少什么 模型 using System.Collections.Generic; using System.Data.Entity; using Syst
using System.Collections.Generic;
using System.Data.Entity;
using System.Web.Mvc;
namespace TestropDownCreate.Models
{
public class TestModel
{
public int ID { get; set; }
public string Name { get; set; }
public string SelectedGender { get; set; }
public IEnumerable<SelectListItem> Gender
{
get
{
return new[]
{
new SelectListItem {Value = "M", Text = "Male"},
new SelectListItem {Value = "F", Text = "Female"}
};
}
}
}
public class TestModelDBContext : DbContext
{
public DbSet<TestModel> TestModel { get; set; }
}
}
使用System.Collections.Generic;
使用System.Data.Entity;
使用System.Web.Mvc;
命名空间TestropDownCreate.Models
{
公共类测试模型
{
公共int ID{get;set;}
公共字符串名称{get;set;}
公共字符串SelectedGender{get;set;}
公共数字性别
{
得到
{
返回新的[]
{
新建SelectListItem{Value=“M”,Text=“Male”},
新建SelectListItem{Value=“F”,Text=“Female”}
};
}
}
}
公共类TestModelDBContext:DbContext
{
公共DbSet TestModel{get;set;}
}
}
通过scaffold生成的视图,您可以看到我对生成的代码进行了注释,并将
@Html.dropdownlist导致转储的原因,我应该如何解决它
@model TestropDownCreate.Models.TestModel
@{
ViewBag.Title = "Create";
}
<h2>Create</h2>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>TestModel</h4>
<hr />
@Html.ValidationSummary(true)
<div class="form-group">
@Html.LabelFor(model => model.Name, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.SelectedGender, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(model => model.SelectedGender, Model.Gender)
@*@Html.EditorFor(model => model.SelectedGender)
@Html.ValidationMessageFor(model => model.SelectedGender)*@
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
@model TestropDownCreate.Models.TestModel
@{
ViewBag.Title=“创建”;
}
创造
@使用(Html.BeginForm())
{
@Html.AntiForgeryToken()
测试模型
@Html.ValidationSummary(true)
@LabelFor(model=>model.Name,新的{@class=“controllabel col-md-2”})
@EditorFor(model=>model.Name)
@Html.ValidationMessageFor(model=>model.Name)
@LabelFor(model=>model.SelectedGender,新的{@class=“controllabel col-md-2”})
@Html.DropDownListFor(model=>model.SelectedGender,model.Gender)
@*@EditorFor(model=>model.SelectedGender)
@Html.ValidationMessageFor(model=>model.SelectedGender)*@
}
@ActionLink(“返回列表”、“索引”)
@节脚本{
@Scripts.Render(“~/bundles/jqueryval”)
}
根据经验,我会提出一个大胆的建议,您将获得一个ArgumentNullException
异常,因为SelectedGender
的值尚未设置。所以,这里发生的是
@Html.DropDownListFor(model => model.SelectedGender, Model.Gender)
asp.net正在尝试使用某个值预先选择dropdownlist,为此,它查看SelectedGender
的值,并尝试将其与Gender
中提供的任何值进行匹配,但是,SelectedGender
没有设置,因为它为空。现在,要解决这个问题,您可以采用两种方法:
Gender
中指定的值之一匹配的默认值初始化SelectedGender
…M或FSelectedGender
,然后向Gender
添加默认值,如下所示
public IEnumerable<SelectListItem> Gender
{
get
{
return new[]
{
new SelectListItem {Value = "", Text = "--Select a gender--"},
new SelectListItem {Value = "M", Text = "Male"},
new SelectListItem {Value = "F", Text = "Female"}
};
}
}
公共IEnumerable性别
{
得到
{
返回新的[]
{
新建SelectListItem{Value=”“,Text=“--选择性别--”},
新建SelectListItem{Value=“M”,Text=“Male”},
新建SelectListItem{Value=“F”,Text=“Female”}
};
}
}
正如Jhoon在评论中指出的建议,您实际上不需要在数据库中保留性别值,但我理解这超出了您的问题范围转储是什么意思?你说的是内存转储吗?@Leo-不,转储是空引用,为什么你在数据库中存储男性和女性?最好的方法是对它们使用Enum。您也可以为它们创建表。@JhoonBey-您能提供一个示例,说明我应该如何存储它们吗?也许这会导致问题……嗨,Leo投票支持您的帮助。。对不起,我的回复延迟了,第一个建议你能举例说明我应该在哪里定义它吗?第二个建议我尝试了,我得到了同样的结果(我只是添加了第一行选择性别…我错过了什么吗?顺便说一句,你建议在其他地方使用性别定义,请让我知道在哪里?我对这个话题非常陌生。。。