1

假设我有一个如下所示的 URL:用户 IDlocalhost/userdetails/5在哪里。5有什么方法可以直接在视图(剃刀视图引擎)中使用 ID 并显示详细信息?还是我在控制器的默认操作中处理它?

4

5 回答 5

1

现在为了简单起见,专注于获取id视图,您基本上希望使用id用数据填充模型,然后将其传递给视图。所以在你的控制器中:

public ActionResult Index(int id)
{
    UserModel model = db.Users.Where(u => u.Id == id).SingleOrDefault();

    return View(model);
}

视图(非常简化)可能如下所示:

@model MyProject.Models.UserModel

@Html.DisplayFor(m => m.Id)
@Html.DisplayFor(m => m.Username)

这是非常基本的。最终,您会意识到应该为视图使用视图模型,而不是直接来自数据源的域模型。这本身就为您提供了另一个问题,需要以将属性从域模型映射到您的视图模型的形式来解决。通常,为此使用AutoMapperValueInjecter。不过现在,最好只专注于将数据传递给视图并将其返回到控制器中,以便您可以使用它来做一些事情。

更新

这是一个简单的场景,演示了如何将数据返回到控制器中。所以基本上,你有一个你要提交的表格:

@using (Html.BeginForm("Index", "Home"))
{
    // Form elements and submit button
}

这会将数据发布到此操作方法,以便您对数据执行任何操作:

[HttpPost]
public ActionResult Index(UserModel inputModel)
{
    // Check to see if the model's data was valid.
    if (ModelState.IsValid)
    {
        // Do something in the database here.
        // Then redirect to give the user some feedback.
        return RedirectToAction("Thanks");
    }

    // The model validation failed so redisplay the view.
    return View(inputModel);
}
于 2012-08-10T14:00:07.930 回答
0

您可以在控制器或视图中使用它作为扩展方法。示例:假设您的路线 ID 持有者在 global.asax 中具有默认值

public int IdFromAdress(HttpContext httpContext)
{
    RouteData rd = httpContext.Request.RequestContext.RouteData;
    string stringId = (string)rd.Values["id"];
    return int.Parse(stringId);
{
于 2012-08-10T13:50:24.983 回答
0

您应该使用模型(即模型传递回您的视图)。ViewBag 是另一种选择,但由于 ID 是模型本身的一部分,因此这样做没有任何意义。

看法

    @model User
    @{
       ViewBag.Title = "User Details";
    }

    @Model.Id;

控制器

    public ActionResult UserDetails(int id)
    {
        return View("UserDetails", (object)id);
    }
于 2012-08-10T13:51:47.937 回答
0

你可以用这个获取id

@HttpContext.Current.Request.RequestContext.RouteData.Values["id"].ToString()

但我建议使用 ViewMdoel 将值传递给视图而不是 ViewBag 或直接从视图访问

于 2012-08-10T13:59:18.773 回答
0

是的你可以。有不止一种方法可以做到这一点,但是由于您已经标记了您的帖子 MVC,假设您想要使用“MVC 方式”,这意味着(imo)使用视图模型。

所以你写了一个视图模型

public class MyViewModel()
  {
    public int ID {get; set;}
  }

您在控制器中填充模型并将其传递给视图

public ActionResut MyView (int id)
  {
    var viewModel = new MyViewModel {ID = id};
    return View (viewModel);
  }

然后你有一个强类型视图(强类型到 MyViewModel,即),你可以引用模型的属性

@Model.ID

然后为了使它有用,您可以将您想要使用的任何其他属性添加到您的视图模型中。然后,您可以在呈现视图之前将它们填充到控制器中(例如,显示用户信息),或者让用户在视图中为您填充它们(使用文本框等包装在表单中)。然后您可以像这样在控制器的发布操作中收集用户输入

[HttpPost]
public ActionResult MyView(MyViewModel viewModel)
  {
    //do stuff with the data from the viewModel
  }
于 2012-08-10T14:04:40.913 回答