在.net MVC 5中显示描述而不是代码

时间:2013-12-29 01:06:39

标签: asp.net-mvc entity-framework

我有一个表格,用于存储我在应用中需要的所有不同代码/值关键字:

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());
}

2 个答案:

答案 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()填充了描述,而不是代码。