如何在ActionLink中使用动态var来调用不同的控制器操作

时间:2012-08-12 19:09:28

标签: asp.net-mvc

ControllerA的一部分:

public ActionResult Index()
    {
        ViewBag.Message = "ToolScope Testing";

        var Baselines = from b in db.Baselines
                            orderby b.Name
                            select b;
        ViewBag.Baselines = Baselines;

        return View();
    }

ControllerA的部分视图

@foreach (var item in @ViewBag.Baselines) 
    { 
        <tr>
            <li> @Html.ActionLink( item.Name, "Details", "BaseLine",new { id = item.BaselineID }, null) </li>
        </tr>
    }

item.Name导致问题,但是,如果我使用

之类的东西,它会起作用
    <li> @Html.ActionLink( "SomeName", "Details", "BaseLine",new { id = item.BaselineID }, null) </li>

如何获得动态名称,即第一个ActionLink?

P.S。:我是MVC的新手

1 个答案:

答案 0 :(得分:1)

我发现你是MVC的新手。好消息,你已经得到了V(iew)和C​​(ontroller)。现在是掌握M(odel)的时候了。在您的示例中,您使用ViewBag将知识从Controller传输到View。这是模型的典型责任。因此,您需要在Models目录中创建一个新类。它可能看起来像这样:

public class MyFirstModel
{
    public IEnumerable<MyCustomType> Baselines { get; set; }

    public MyFirstModel() { }
}

编辑您的控制器

public ActionResult Index()
{
    ViewBag.Message = "ToolScope Testing";

    var baselines = from b in db.Baselines
                        orderby b.Name
                        select b;

    var model = new MyFirstModel
    {
        Baselines = baselines
    };

    return View(model);
}

然后,将其添加到视图的顶部:

@model MvcApplication.Models.MyFirstModel

现在您可以在视图中使用此代码:

@foreach (var item in Model.BaseLines) 
{ 
    <tr>
        <li> @Html.ActionLink( item.Name, "Details", "BaseLine",new { id = item.BaselineID }, null) </li>
    </tr>
}