【问题标题】:MVC3 Razor - How to pass data from controller to view - and back to controllerMVC3 Razor - 如何将数据从控制器传递到视图 - 并返回到控制器
【发布时间】:2012-04-03 17:25:25
【问题描述】:

我有一个视图,其中所有内容都将由用户填充 - 但与父实体相关。我使用 ViewBag 将该 ID 传递给我的视图,但我不知道如何将其返回到控制器中的发布操作。我试过隐藏表单域,但它没有显示在帖子中,或者我不知道如何抓取它...... 控制器:

public ActionResult AddCar(int id)
{
ViewBag.Id = id;
return View();
}

查看(尝试):

    @using (Html.BeginForm("AddReturn", "DealerAdmin", new { id = carId }))
    {
View (tried):
     @Html.Hidden(carId.ToString())

如何在控制器的 post 操作中检索值?还是有更好/不同的方法来处理它? 谢谢

【问题讨论】:

    标签: asp.net-mvc-3 razor


    【解决方案1】:

    隐藏字段应该可以工作。问题是您的控制器不接受它。

    您可以使用 ViewModel 来实现这一点。或者,在您的操作中使用以下代码:

    id = Request.Form["id"]
    

    【讨论】:

    • 感谢您的回复。根据 Robby Shaw,我使用了 Request.Form。
    【解决方案2】:

    有办法
    1. 如果只有一个值要发送到控制器,则使用查询字符串发送值
    2. 如果你想从视图中收集许多字段,你可以使用 formcollection
    示例::

    public actionresult method1()
    {
     int id = //everything you want
     viewbag.id=id;
     ....
     //and other field to collect
    }
    

    在视图中

    <form method="post" action="method1" enctype="now i dont remeber the value of this option" >
    
    @html.hidden("id")
    .....
    
    <input type="submit" value"Send"/>
    </form>
    
    [httpPost]
    public actionresult method1(fromcollection collection)
    {
     int id = collection.get("id");
     ....
     //and other field to collect
    }
    

    【讨论】:

      【解决方案3】:

      为post创建一个ViewModel,如下所示

      public class Post
      {
         int id {get;set;}
         //other properties
      }
      

      并在您的控制器操作中发送一个帖子对象

      public ActionResult AddCar(int id)
      {
       Post post = new Post();
       post.Id = id;
      return View(post);
      }
      

      你的视图应该使用 Post 类作为模型

      @model namespace.Post
      @using (Html.BeginForm("AddReturn", "DealerAdmin", FormMethod.Post)
          {
            @Html.HiddenFor(model => model.Id)
          }
      

      你的控制器动作应该有一个 post 对象作为输入参数

      public ActionResult AddReturn(Post post)
      {
       //your code
      }
      

      【讨论】:

        【解决方案4】:

        试试这样:

        @using (Html.BeginForm("AddReturn", "DealerAdmin", new { id = ViewBag.Id }))
        {
            ...
        }
        

        【讨论】:

        • 谢谢。如何在我的控制器中检索我的发布操作中的值?
        • 您可以让您的控制器操作采用具有Id 属性的视图模型。然后默认模型绑定器将自动填充此属性。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多