请问从控制器访问cshtml中设置的隐藏值?

时间:2011-09-22 09:11:53

标签: .net asp.net asp.net-mvc-3

我可以在cshtml

中使用这样的内容吗?
@Html.hiddenfor(model => model.name , "passname")

在控制器中:

我想访问这个modal.name,它将具有我设置的值,即“passname”

2 个答案:

答案 0 :(得分:1)

2种方式:

1 - 您的模型必须具有可以传递给HiddenFor的此属性。例如

class PageModel{
   public string HiddenFieldValue{get;set;}
   public string Name {get;set;}
}

在cshtml中

@model PageModel
...
@Html.hiddenfor(model => model.name, model.HiddenFieldValue)
控制器中的

public ViewResult MyPage(){
    return View(new PageModel(){
        HiddenFieldValue = "Hello World!";
    });
}

第二种方式:通过ViewBag/ViewData传入。

控制器中的

public ViewResult MyPage(){
    ViewBag.HiddenFieldValue = "Hello World!";
    return View();
}

在cshtml中

@model PageModel
...
@Html.hiddenfor(model => model.name, ViewBag.HiddenFieldValue)

答案 1 :(得分:1)

隐藏字段的值将与所有其他POST数据一起发送(如果您的表单使用POST)。

所以你可以:

  1. 将属性“passname”添加到用于检索数据的模型中。
  2. 在处理帖子的操作上创建名为“passname”的参数。
  3. 将一个FormCollection添加到argement(在处理帖子的操作上),并从那里检索值。
  4. 使用Request.Form [“passname”]或事件Request [“passname”]

    从请求中获取
    // Example 1
    
    public class MyModel {
       // other properties
    
       public string passname { get; set; }
    }
    
    public class MyController : Controller {
         [HttpPost]
         public ActionResult MyAction(MyModel data) {
         }
    }
    
    // Example 2
    
    public class MyController : Controller {
       [HttpPost]
       public ActionResult MyAction(string passname) {
       }
    }
    
    // Example 3
    
    public class MyController : Controller {
       [HttpPost]
       public ActionResult MyAction(FormCollection data) {
            var passname = data["passname"];
       }
    }
    
    // Example 4
    
    public class MyController : Controller {
       [HttpPost]
       public ActionResult MyAction() {
            var passname = Request.Form["passname"];
       }
    }