我有一个表格,用于存储我在应用中需要的所有不同代码/值关键字:
public class Keyword
{
public int id { get; set;}
public string name { get; set; }
public string valuecode { get; set; }
public string valuename { get; set; }
}
然后我使用关键字存储这些记录
name valuecode valuename
.DealState 1 Draft
.DealState 2 Final
.DealState 3 Cancelled
.DealType NEW New Business
.DealType RNW Renewal
.DealType WFA Waiting for approval
然后在其他模型中,我有使用这些关键字填充的字段。例如,
public class Deal
{
....
public string state { get; set; }
public string type { get; set; }
....
}
我设法在“创建”和“编辑”视图中显示“valuename”时填充了“valuecode”字段(我使用带有控制器内置SelectList的DropDownList),但我找不到显示valuename而不是valuecode的方法在索引和详细信息视图中。
我正在尝试在ViewBag for Index中传递相同的SelectList,但后来我不知道使用哪种语法来替换返回的每条记录的状态“description”的“状态”代码。
任何提示?
PS:我对.net和mvc很新,通常使用RoR和ActiveRecord ......
修改
在我的KeywordController中,我有一个方法
public SelectList selectKeywordValues(string kwname, object selectedKeyword = null)
{
var keywordsQuery = from d in db.Keywords
where d.name == kwname
orderby d.valuename
select d;
SelectList kwlist = new SelectList(keywordsQuery, "valuecode", "valuename", selectedKeyword);
return kwlist;
}
然后在我的DealController中我有索引方法
public ActionResult Index()
{
var kw = new KeywordController();
ViewBag.state = kw.selectKeywordValues(".DealState");
return View(db.Deals.ToList());
}
答案 0 :(得分:0)
您可以定义名为DealViewModel的view model,其中包含DealState和DealType属性。然后在传递给引用视图模型的视图之前,在LINQ中使用连接填充DealViewModel。
另一种方法是在EF5中使用枚举。
答案 1 :(得分:0)
<强>解决强>
在DealController中,索引方法如下
public ActionResult Index()
{
var kw = new KeywordController();
SelectList states = kw.selectKeywordValues(".DealState");
SelectList types = kw.selectKeywordValues(".DealType");
foreach (var item in db.Deals.ToList())
{
SelectListItem mystate = states.Where(row => row.Value == item.state).ElementAt(0);
SelectListItem mytype = types.Where(row => row.Value == item.type).ElementAt(0);
item.state = mystate.Text;
item.type = mytype.Text;
}
return View(db.Deals.ToList());
}
现在db.Deals.ToList()填充了描述,而不是代码。