我的asp.net mvc操作方法中有以下代码: -
var CustomerData = customerlist.Select(m => new SelectListItem()
{
Text = m.SDOrganization.NAME,
Value = m.SDOrganization.ORG_ID.ToString(),
});
目前如果我从ORG_ID中删除ToString(),我将收到“无法显式将long转换为字符串”的错误。所以我似乎必须将SelectListItem的值和文本定义为字符串。但是由于SelectListItem应该保持很长时间,所以有没有办法传递SelectListItem的值而不是字符串?
答案 0 :(得分:14)
...那么有没有办法传递SelectListItem的值而不是字符串?
没有。这样做是没有任何意义的,因为它只是呈现时,它只是没有long
概念的HTML。
如果我们有行动
public ActionResult Test()
{
var dictionary = new Dictionary<int, string>
{
{ 1, "One" },
{ 2, "Two" },
{ 3, "Three" }
};
ViewBag.SelectList = new SelectList(dictionary, "Key", "Value");
return this.View();
}
和以下视图&#34; Test.cshtml&#34;:
@using (Html.BeginForm())
{
@Html.DropDownList("id", ((SelectList)ViewBag.SelectList), "All")
<input type="submit" value="Go" />
}
生成的HTML是
<form action="/home/test" method="post">
<select id="id" name="id">
<option value="">All</option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
<input type="submit" value="Go">
</form>
当我们发布此动作时,您的号码文本会被Model Binder有效地解析回您想要的类型
[HttpPost]
public ActionResult Test(int? id)
{
var selectedValue = id.HasValue ? id.ToString() : "All";
return Content(String.Format("You selected '{0}'", selectedValue));
}
以上工作正如您所料。