您好我在最后一小时尝试将我的c#后端连接到前端以输出列表。 我一直想知道将数据从后端传递到前端的最佳方法是什么。
在我的场景中,我只想从mvc输出一个简单的列表,但是如何将我的列表发送到前端,这样我可以做一些简单的事情,就像在foreach中输出表格中的所有数据一样:
foreach (var value in customerList) {
<p>value.Name</p>
}
我查看了此链接中建议的解决方案:How to pass List from Controller to View in MVC 3. by archil
但我无法弄清楚放在哪里 受保护的内部ViewResult视图( 对象模型 )
那么如何输出我的清单呢? 我知道该列表包含内容,因为我已经设置了一个断点并逐步完成了它。
这就是我的代码的样子:
public List<Customer> customerList = new List<Customer>();
public ActionResult Index()
{
var client = new CustomerAzureAPIApp();
var response = client.Customer.Get();
var customers = response;
foreach (var customer in customers)
{
customerList.Add(customer);
}
return View();
}
我知道我可以使用ViewBag,但我不想为列表中的每个项目创建一个新的ViewBag,我宁愿只发送整个列表。有什么建议吗?
答案 0 :(得分:3)
我不知道最佳解决方案,但不要对archil在您提供的链接中建议的代码感到困惑。
您只需通过
传递customerList即可return View(customerList);
作为参数,因为该行代码通过使用呈现响应视图的模型自动创建ViewResult对象。
所以在你的前端你最终会为你的桌子做这样的事情:
<table
<tr>
<th>ID</th>
<th>Name</th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>@item.Name</td>
</tr>
}
</table>
请记住在项目之前加上“@”因为我们正在处理Razor视图引擎。
答案 1 :(得分:1)
如前所述,您可以通过返回视图中的列表来使用模型
return View(*insert list here*);
而不是你认为:
@model List<*insertTypehere*>
在您的foreach中,您将使用变量名称
Model
还有另一种方法是不在视图中返回任何内容并在控制器中使用Viewbag。
Viewbag.TheNameYouWish = *insert list*
在您的视图中,您可以使用:
@Viewbag.TheNameYouWish
所以
@foreach (var item in Model)
或
@foreach (var item in @Viewbag.TheNameYouWish)
完成这项工作。
答案 2 :(得分:0)
在你看来你已经声明了应该绑定的模型,然后迭代它:
@model List<Customer>
@foreach (var value in Model) {
<p>value.Name</p>
}
您需要将列表传回给行动进行查看,以便更改以下内容:
return View();
到:
return View(customerList);