2014-07-02 36 views
-1

我是新来的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字段中的硬编码值到其他页面上的第一个视图按钮点击后?

+0

那么你的表单看起来并没有发布到TestController上的Index方法,所以我不确定你想要解决什么问题。 –

+0

我已经改变了这一点,但我仍然没有线索? – user3798474

+0

为什么索引'string'的返回类型而不是'ActionResult'? –

回答

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) 
    { 


    } 
+0

谢谢,我该如何将customerref分配给视图中的相关隐藏字段? – user3798474

+0

请删除客户customerReferenceNumber引号如果你想通过它作为int不是一个字符串 – sylwester

+0

和一切都好吗? – sylwester

0

如果可能name your parameters correctly it seems to work fine,也就是说你需要输入名字到方法的参数相匹配。

customerReferenceNumber” 不等于 “customerref

此外,由于您没有通过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); 
    } 

} 
0

为了得到它另一页上意味着另一个控制器说控制器2,“指数”的方法,你应该张贴以隐藏字段的另一个控制器动作绑定到模型。

@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 
} 
0

无论您使用的模型或更新您的控制器

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

} 

记住参数名称是一样的你的隐藏字段的名称。

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?" /> 
} 

这是okk。但控制器操作应定义为

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


} 

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

相关问题