[英]C# MVC - DropDownListFor does not select default ViewModel data
我有一个DropdownListFor
,用于保存标签列表。 重要的是要说我将拥有3个相同的下拉菜单,因为每个请求最多可以关联3个标签。
我正在使用ViewModel方法,并且希望远离ViewBag
。
这是我的视图模型 。 标签列表包含所有标签。 选定的标签保存与请求对象当前关联的所有标签。
public class editRequestViewModel
{
public Request userRequest { get; set; }
public List<SelectListItem> Tags { get; set; }
public List<SelectListItem> SelectedTags { get; set; }
}
这是我特定于标签的控制器 。
public ActionResult Edit(int id)
{
try
{
if (ModelState.IsValid)
{
domainUser GetAllUsers = new domainUser();
using (var db = new DAL.HelpDeskContext())
{
var query = (from m in db.Requests
where m.ID == id
select new editRequestViewModel()
{
userRequest = m,
Tags = (from x in db.Tags
select new SelectListItem()
{
Text = x.Name,
Value = x.ID.ToString()
}).ToList().OrderBy(x => x.Text).ToList(),
SelectedTags = (from x in db.AssociatedTags
join u in db.Tags on x.TID equals u.ID into cc
from c in cc.DefaultIfEmpty()
where x.RID == id
select new SelectListItem()
{
Text = c.Name,
Value = c.ID.ToString()
}).ToList().OrderBy(x => x.Text).ToList()
}).FirstOrDefault();
return View(query);
}
}
else
return View();
}
catch (Exception ex)
{
return View("Error", new HandleErrorInfo(ex, "Change", "Browse"));
}
}
我试图像这样在控制器中设置值,但不会改变结果。 (15是标签的可能ID)
query.SelectedTags[0].Value = "15";
最后,这就是我如何使用View中的下拉列表。
<div class="form-group">
@Html.Label("Tag One", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-2">
@Html.DropDownListFor(model => model.SelectedTags[0].Value, Model.Tags, "Select Tag", new { @class = "form-control " })
</div>
</div>
使用上面的代码,下拉列表默认为“选择标签”。 显然,如果我将一个值拉入SelectedTags[0].Value
,则希望该值成为首次加载页面时的默认值。
某事告诉我问题的索引方式,但是我似乎无法弄清楚原因。 由于我的列表中有3个选择列表项对象,因此我应该能够只指定索引,对吗?
遵循@MikeMcCaughan和@RyanWilson的指导,我认为我看到了可行的解决方案。
我在视图模型中添加了3个属性。
然后,在控制器中,我使用SelectedTags查询将每个值设置为可能的3个标签ID。
query.tagSelOne = query.SelectedTags[0].Value;
只需将Helper更改为:
@Html.DropDownListFor(model => model.tagSelOne, Model.Tags)
这似乎可以完成工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.