Asp.net mvc 如何在ActionLink中使用动态变量调用不同的控制器';s动作

Asp.net mvc 如何在ActionLink中使用动态变量调用不同的控制器';s动作,asp.net-mvc,Asp.net Mvc,控制器的一部分: public ActionResult Index() { ViewBag.Message = "ToolScope Testing"; var Baselines = from b in db.Baselines orderby b.Name select b; ViewBag.Baselines = Bas

控制器的一部分:

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>
    }
@foreach(@ViewBag.Baselines中的变量项)
{ 
  • @Html.ActionLink(item.Name,“详细信息”,“基线”,新的{id=item.BaselineID},null)
  • }
    item.Name导致了问题,但是,如果我使用

        <li> @Html.ActionLink( "SomeName", "Details", "BaseLine",new { id = item.BaselineID }, null) </li>
    
  • @Html.ActionLink(“SomeName”、“详细信息”、“基线”,新的{id=item.BaselineID},空)
  • 我应该怎么做才能拥有动态名称,即第一个ActionLink


    附言:我是MVC新手

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

    public class MyFirstModel
    {
        public IEnumerable<MyCustomType> Baselines { get; set; }
    
        public MyFirstModel() { }
    }
    
    然后,将其添加到视图的顶部:

    @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>
    }
    
    @foreach(模型基线中的变量项)
    { 
    
  • @Html.ActionLink(item.Name,“详细信息”,“基线”,新的{id=item.BaselineID},null)
  • }
    我看你是MVC新手。好消息,您已经获得了V(视图)和C(控制器)。现在是掌握M(模式)的时候了。在您的示例中,您使用ViewBag将知识从控制器传输到视图。这是模型的典型职责。因此,您需要在Models目录中创建一个新类。它可能看起来像这样:

    public class MyFirstModel
    {
        public IEnumerable<MyCustomType> Baselines { get; set; }
    
        public MyFirstModel() { }
    }
    
    然后,将其添加到视图的顶部:

    @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>
    }
    
    @foreach(模型基线中的变量项)
    { 
    
  • @Html.ActionLink(item.Name,“详细信息”,“基线”,新的{id=item.BaselineID},null)
  • }
    它究竟以何种方式导致问题?你会犯什么错误?到底是哪种方式导致了问题?你犯了什么错误?马丁,非常感谢你的建议。我会尝试一下,但是我以前的方法有什么问题?难道它不应该工作吗?是的,它可以这样工作,因为ViewBag是一个动态对象,可以包含任何内容。但是,使用动态对象而不是类型意味着您将失去像C#这样的强类型语言的许多好处。例如,像ViewBag.baesline这样的打字错误直到运行时才会被注意到,而对于普通类型,编译时会出现错误。此外,用真实的模型替换ViewBag并不是一件很麻烦的事:)马丁,非常感谢你的建议。我会尝试一下,但是我以前的方法有什么问题?难道它不应该工作吗?是的,它可以这样工作,因为ViewBag是一个动态对象,可以包含任何内容。但是,使用动态对象而不是类型意味着您将失去像C#这样的强类型语言的许多好处。例如,像ViewBag.baesline这样的打字错误直到运行时才会被注意到,而对于普通类型,编译时会出现错误。此外,用真实模型替换ViewBag并不是一件很费力的工作:)