mvc5中html助手下拉列表中控制器上的null值发布
本文关键字:null 控制器 html 下拉列表 mvc5 | 更新日期: 2023-09-27 17:59:37
我使用mvc 5进行学习。当我从下拉列表中发送控制器上的数据时,对象在控制器中具有空值。
型号代码:
namespace Dropdownlist.Models
{
using System;
using System.Collections.Generic;
public partial class Country
{
public int ID { get; set; }
public string CountryName { get; set; }
}
}
控制器代码:
namespace Dropdownlist.Controllers
{
public class HOMEController : Controller
{
DropDownEntities db = new DropDownEntities();
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(Country cn)
{
db.Countries.Add(cn);
db.SaveChanges();
return View(cn);
}
}
}
查看代码:
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
@using (Html.BeginForm(FormMethod.Post))
{
<div>
@Html.DropDownList("ddlcountry", new List<SelectListItem>
{
new SelectListItem{ Text = "India", Value = "India"},
new SelectListItem{ Text = "UK", Value = "UK"},
new SelectListItem{ Text = "USA", Value = "USA"}
}, "Select a Country")
</div>
<div>
<input type="submit" value="Save" />
</div>
}
我做错了什么?
如果您希望ID
和CountryName
的值都被发布回来,那么您需要使控件名称与模型的属性相匹配,并且您的视图应该是强类型的,这样您就可以使用Html.DropDownListFor()
助手,现在您可以这样做:
@model Dropdownlist.Models.Country
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
@using (Html.BeginForm(FormMethod.Post))
{
<div>
@Html.DropDownList("ID", new List<SelectListItem>
{
new SelectListItem{ Text = "India", Value = 1},
new SelectListItem{ Text = "UK", Value = 2},
new SelectListItem{ Text = "USA", Value = 2}
}, "Select a Country",new { id="ddlCountry"})
@Html.Hidden("CountryName")
</div>
<div>
<input type="submit" value="Save" />
</div>
}
和countryName,您需要将其设置在隐藏字段中,并在下拉索引更改时设置其值,如:
@section Scripts
{
<script type="text/javascript">
$(document).ready(function () {
$("#ddlCountry").on("change", function () {
$("#CountryName").val($(this).val());
});
});
</script>
}
如果您想设置CountryName
属性,请将视图更改为:
....
@Html.DropDownListFor(x=>x.CountryName, new List<SelectListItem>
....
从控制器加载下拉数据
ViewBag.DropDown = db.YourModel.ToList();
然后在你看来
@Html.DropDownList("Name", (IEnumerable<SelectListItem>)ViewBag.DropDown, "Select ...")
这里有几个问题。下拉列表的名称为"ddlconational",但操作所需的Country对象不具有ddlcocountry属性。ddlconational是印度/英国/美国的字符串。表单应该返回一个Id,该Id将交叉引用另一个表。目前的形式没有任何意义,因为只有一条数据。
这里有几个问题,但我认为你的问题是:
选择列表项的枚举:
public enum Countries
{
India = 1,
UK = 2,
USA = 3
}
那么对于控制器动作:
public ActionResult Index()
{
ViewBag.Country = Enum.GetValues(typeof(Countries)).Cast<Countries>().ToList().Select(r => new SelectListItem { Text = r.ToString(), Value = ((int)r).ToString() });
return View();
}
[HttpPost]
public ActionResult Index(Countries country)
{
var saveit = country;
// whatever you wish to do with the result;
return Content(saveit.ToString());
}
视图:
@using(Html.BeginForm("Index", "Home", FormMethod.Post))
{
@Html.DropDownList("Country")
<button type="submit" >Save</button>
}