gpt4 book ai didi

c# - 如何使绑定(bind)到 Nullable 属性的 DropDownListFor 接受空值?

转载 作者:太空狗 更新时间:2023-10-29 18:00:08 26 4
gpt4 key购买 nike

我在 ASP.NET MVC cshtml 页面中有以下 DropDownList:

@Html.DropDownListFor(model => model.GroupId, (IEnumerable<SelectListItem>)ViewBag.PossibleGroups, "")

该属性定义为 public virtual Nullable<int> GroupId

尽管GroupIdNullable select菜单不接受空选项。如果我尝试在不选择组的情况下保存模型,我会收到以下错误消息:

The field GroupId must be a number.

选择菜单呈现如下:

<select data-val="true" data-val-number="The field GroupId must be a number." id="GroupId" name="GroupId" class="input-validation-error" data-hasqtip="0" aria-describedby="qtip-0">
<option value=""></option>
<option value="1">Test Group</option>
</select>

不,GroupId没有装饰 [Required]属性。

我怎样才能使页面接受 GroupId 的空值? ?

附言GroupId类型 ( Nullable<int>) 是代码生成的。我使用数据库优先方案。我不知道 <Nullable>int 之间有什么区别和 int

更新:

即使空选择项的值为零也无法通过非干扰性 (JavaScript) 验证。但是,将值 -1通过客户端和服务器端验证。所以现在,我使用这个值并在 Controller 中设置 GroupIdnull如果等于 -1 .

我不敢相信对于这样一个简单的问题没有更简单的解决方案。这是 ASP.NET MVC 3 中的错误吗?

最佳答案

为模型绑定(bind)创建类

 public class BindDropDown
{
public Nullable<int> ID{ get; set; }
[Required(ErrorMessage = "Enter name")]
public string Name{ get; set; }
}

Create Controller

    namespace DropDown.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
ViewBag.Message = "Welcome to ASP.NET MVC!";

ViewBag.InterviewList = NumberList;

return View(new BindDropDown());
}
[HttpPost]
public ActionResult Index(BindDropDown d)
{
if (ModelState.IsValid)
{
ViewBag.Message = "Welcome to ASP.NET MVC!";
}
else
{
ViewBag.Message = "error";
}
ViewBag.NumberList = NumberList;

return View(new BindDropDown());
}

public ActionResult About()
{
return View();
}

public static IEnumerable<SelectListItem> NumberList
{
get
{
IEnumerable<NumberClass> interviewAppeals = Enum.GetValues(typeof(NumberClass))
.Cast<NumberClass>();
return from item in interviewAppeals
select new SelectListItem
{
Text = item.ToString(),
Value = ((int)item).ToString()
};

}
}

}
public enum NumberClass
{
One = 1,
Two = 2,
Three = 3
}
}

Index.cshtml

@using DropDown.Models
@model BindDropDown
@{
ViewBag.Title = "Home Page";
}

<h2>@ViewBag.Message</h2>
<p>

</p>
@using (Html.BeginForm("Index", "Home", FormMethod.Post, new { id = "frmOnline" }))
{

@Html.ValidationSummary(false)


<div class="w100">
<div class="fleft">
<label>ID :</label>
</div>
<div class="fleft">
@Html.DropDownListFor(model => model.ID, (IEnumerable<SelectListItem>)ViewBag.NumberList, "")

</div>
</div>
<div class="w100">
<div class="fleft">
<label>Name :</label>
</div>
<div class="fleft">
@Html.TextBoxFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)

</div>
</div>
<div class="w100 clear">
<label>&nbsp;</label>
<div class="fleft">
<input type="submit" value="Save" class="button green" />
@Html.ActionLink("Back", "GetAllAction", null, new { @class = "button gray" })

</div>
</div>
}

关于c# - 如何使绑定(bind)到 Nullable<int> 属性的 DropDownListFor 接受空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22183361/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com