我有一个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";
最后,我将使用查看中的下拉列表。
<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个选择列表项对象,我应该只能指定索引,对吗?
答案 0 :(得分:0)
在@MikeMcCaughan和@RyanWilson的指导下,我认为我看到了可行的解决方案。
我在viewmodel中添加了3个属性。
在控制器中,我使用SelectedTags查询将每个值设置为可能的3个标签ID。
query.tagSelOne = query.SelectedTags[0].Value;
只需将助手改为:
@Html.DropDownListFor(model => model.tagSelOne, Model.Tags)
这似乎可以胜任。