c#razor actionresult参数

时间:2011-06-02 21:59:32

标签: c# asp.net-mvc razor

我是mvc razor的新手,所以请原谅我对这个主题的不满。如果我理解得很好,那么控制器会获取url参数,如下所示:

  // Get: /User/23
  public ActionResult(int? id) { 
       return View("User", id);
  }

基本上,这个ActionResult获取url中的参数并将其发送到某个地方。但是哪里?

另外,假设我有一个存储库,我在其中返回IQueryable<>类中的所有用户。如果id不为null,则仅获取相关结果,如果不是,则获取整个列表。因此,我想将一个列表返回给视图并显示结果。我怎样才能做到这一点?为了便于理解,我给出了以下示例:

// I want to populate this list based on the id in the actionresult
@foreach(var u in MyList) { 
   name: @u.Name <br>
   lastname: @u.LastName <hr>
}

2 个答案:

答案 0 :(得分:1)

无论您返回什么,因为第二个参数是传递给视图的模型。然后,您可以在WebViewPage中继承剃刀页面,或者更好,使用@model关键字。传入的数据可通过“模型”变量在页面中获得。

之后使用的好例子是http://weblogs.asp.net/scottgu/archive/2010/10/19/asp-net-mvc-3-new-model-directive-support-in-razor.aspx

答案 1 :(得分:1)

return View在基类Controller中调用辅助方法。

它将返回ViewResult,参数是传递给视图的模型。

因此,如果您想要传递用户列表,您可以这样做:

public ActionResult Users()
{
   var users = _repository.FindAllUsers();
   return View(users);
}

请注意我是如何省略视图名称的,因此默认约定是根据操作名称查找视图,在本例中为Users.cshtml。总是尝试使用约定优于配置 - 这就是使MVC变得更好的原因。

@model IEnumerable<YourApp.Models.User>
@Html.DisplayForModel()

<强>共享\ DisplayTemplates \ User.cshtml

@Html.LabelFor(model => model.Name)
@Html.DisplayFor(model => model.Name)
@Html.LabelFor(model => model.LastName)
@Html.DisplayFor(model => model.LastName)

请注意我没有使用foreach循环 - 我再次使用i自定义显示模板 - 约定优于配置。