将值从隐藏字段获取到另一个页面

时间:2014-07-02 16:02:04

标签: asp.net-mvc

我是mvc的新手很抱歉,如果这听起来很愚蠢:

我有一个观点,使用以下代码:

  using (Html.BeginForm("Index", "testcontroller", FormMethod.Post))
    {
        @Html.Hidden("customerReferenceNumber", "116999")
        @Html.Hidden("customerName", "John Smith")
        @Html.Hidden("mobileNumber", "12345")
        <input type="submit" value="Mobile Lost or Stolen?" />
    }

我的另一个名为testview2的视图和一个名为testcontroller的控制器,有一个方法:

   public string Index(int customerref,string customername,string mobilenumber)
    {


    }

如何在按钮点击第一个视图后将html.hidden字段中的硬编码值传送到另一页?

5 个答案:

答案 0 :(得分:0)

actionPlease在同一控制器中创建第二个索引操作并向其添加[httppost]过滤器

using (Html.BeginForm("Index", "testcontroller", FormMethod.Post))
    {
        @Html.Hidden("customerReferenceNumber", 116999)
        @Html.Hidden("customerName", "John Smith")
        @Html.Hidden("mobileNumber", "12345")
        <input type="submit" value="Mobile Lost or Stolen?" />
    }


[HttpPost]
public string Index(int customerReferenceNumber,string customerName,string mobileNumber)
    {


    }

答案 1 :(得分:0)

如果您可能name your parameters correctly it seems to work fine,也就是说您需要输入名称以匹配方法中的参数。

  

&#34;的 customerReferenceNumber &#34;不等于&#34; customerref &#34;

此外,由于您没有通过customerref,因此它应该抛出异常,因为它需要int,而MVC不知道要传递的是什么int

查看:

@model HelloWorldMvcApp.ResultViewModel
@{
    Layout = null;
}

<!DOCTYPE html>
<!-- template from http://getbootstrap.com/getting-started -->

<html lang="en">
    <body>
    @using (Html.BeginForm())
    {
        @Html.Hidden("customerReferenceNumber", "116999")
        @Html.Hidden("customerName", "John Smith")
        @Html.Hidden("mobileNumber", "12345")
        <input type="submit" value="Mobile Lost or Stolen?" />
    }

    @if (Model != null)
    {
        <p>
        Results: <br />
            @Model.CustomerReferenceNumber<br />
            @Model.CustomerName<br />
            @Model.MobileNumber<br />
        </p>
    }

    </body>
</html>

控制器:

public class HomeController : Controller
{
    [HttpGet]
    public ActionResult Index()
    {
        ResultViewModel model = null;

        return View(model);
    }


    [HttpPost]
    public ActionResult Index(int customerReferenceNumber, 
                              string customerName, 
                              string mobileNumber)
    {               
        var model = new ResultViewModel();

        model.CustomerName = customerName;
        model.CustomerReferenceNumber = customerReferenceNumber;
        model.MobileNumber = mobileNumber;

        return View(model);
    }

}

答案 2 :(得分:0)

要在另一个页面上获取它意味着另一个控制器说Controller2,“索引”方法,你应该将视图发布到另一个控制器动作,其中隐藏的字段绑定到模型。

@model HelloWorldMvcApp.ResultViewModel
@{
    Layout = null;
}

<!DOCTYPE html>


<html lang="en">
    <body>
    @using (Html.BeginForm("Index","TestController2"))
    {
        @Html.HiddenFor(m=>m.CustomerReferenceNumber)
        @Html.HiddenFor(m=>m.MobileNumber) 
        @Html.HiddenFor(m=>m.CustomerName)
    }
    </body>
</html>

在TestController2中

[HttpPost]
ActionResult Index(ResultViewModel model) 
{
   //you will get values in model 
}

答案 3 :(得分:0)

使用模型或将控制器更新为

public string Index(int customerReferenceNumber, string customerName, string mobileNumber)
{

}

请记住,参数名称与隐藏字段的名称相同。

答案 4 :(得分:0)

名称应该匹配。由此仅发生参数绑定。 并且,控制器操作始终返回ActionResult或从中派生的任何内容。您编写的方法被视为常规方法,而不是控制器操作

using (Html.BeginForm("Index", "testcontroller", FormMethod.Post))
{
    @Html.Hidden("customerReferenceNumber", "116999")
    @Html.Hidden("customerName", "John Smith")
    @Html.Hidden("mobileNumber", "12345")
    <input type="submit" value="Mobile Lost or Stolen?" />
}

这是好的。但控制器动作应定义为

public ActionResult Index(string customerReferenceNumber,string customerName,string mobileNumber)
{


}

注意名称的更改以及参数列表中的数据类型。