如何在MVC4中将字符串数组从控制器传递到视图而不创建多个ActionResults?

4

我刚接触mvc4,请您多多包涵。我想从控制器将多个目的地名称传递到视图中,而不需要创建更多的操作结果和对象。我想使用字符串数组创建一个目的地名称表格。请问这种做法可行吗?如果有帮助,感谢您提供帮助。谢谢!

Controller:
public ActionResult Destinations()       
{           
   string[] arrivalAirport = new string[4] { "london", "paris", "berlin", 
                                                          "manchester" };            

   Destination dest = new Destination();            
   dest.arrivalName = arrivalAirport[2];      

   return View(dest);
 }

Model:
public class Destination    
{        
    public string arrivalName { get; set; }    
    public string arrivalCode { get; set; }
}

View:
@model Flight.Models.Destination

@{
  ViewBag.Title = "Destinations";
  Layout = "~/Views/Shared/_Layout.cshtml";
}
<table>
    <tr>
        <td>@Html.Label("Arrival Name")</td>
        <td>@Model.arrivalName</td>            
    </tr>
</table>
2个回答

5
你的问题描述很混乱,但是看起来你想向视图传递多个Destination对象。如果是这样,请直接将多个Destination对象传递到视图中。
控制器:
public ActionResult Destinations()       
{           
    string[] arrivalAirport = new string[4] { "london", "paris", "berlin", 
                                                          "manchester" };            
    var airports = new List<Destination>();

    foreach( var airport in arrivalAirport )
    {
        airports.Add( new Destination() { arrivalName = airport } );
    }   

    return View(airports);
}

查看:

@model List<Flight.Models.Destination>

<table>
@foreach( var dest in Model )
{
    <tr>
    <td>Arrival Name</td>
    <td>@dest.arrivalName</td>            
</tr>
}
</table>

谢谢,这很好用。能否添加其他信息,如航班号、时间等?同一个视图是否可行,还是我需要创建另一个ActionResult? - Damon Reynolds
我不确定我理解这个问题,但也许是因为我不明白为什么你不只是假设你可以继续添加更多的属性到目标对象中,以便将任何你想要发送到视图中的内容都传递过去。顺便说一句,如果这个回答解决了你的问题,请点赞或者标记为答案。 - Craig W.

1
使用视图模型,您可以定义视图所需的任何信息。
public class ViewModel{
    public List<string> Airports { get; set; }
    public Destination destination { get; set; }
    etc...
}

然后在您的控制器中填充视图模型

public ActionResult Index(){
    ViewModel vm = new ViewModel();
    var db = //query your database
    vm.Destination.arrivalName = db.ArrivalName;
    etc...
    return View(vm);
}

和您的视图相关

@model ViewModel

@Html.TextBoxFor(x => x.Destination.arrivalName)

希望这有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接