在MVC中将值从视图传递到控制器

时间:2012-07-19 12:54:28

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

这是我的观点

<form method="post" action="/LoadCustomerAndDisplay/Search">
<fieldset>
    <legend>Customer Book</legend>
    <%= Html.Label("Name") %>

    <%: Html.TextBox("Name") %>
    <br />
    <br />
    <div>
        <input type="submit" value="Sign" />
    </div>
</fieldset>
</form>

这是我的控制器...

 public ActionResult Search() 
    {
        CustomerModels objCustomer = new CustomerModels();
        var dataval = objCustomer.getData();
        return View(dataval);

}

如何在控制器中获取名称文本框的值,并将其传递给getData,就像这样......

 var dataval = objCustomer.getData(ViewData['Name']);

这个我把...显示错误fname ....缺少添加指令....现在的问题是什么......

 <% Html.BeginForm("Search", "LoadCustomerAndDisplay");%>
    <%: Html.TextBoxFor(m => m.fname) %>
    <p>
        <button type="submit">
            Save</button></p>
    <% Html.EndForm();%>

2 个答案:

答案 0 :(得分:3)

使用强类型视图。在GET操作方法中,将ViewModel的对象传递给视图,并使用HTML帮助器方法创建输入元素。当您提交表单时,由于MVC模型绑定,您将在POST操作方法中将值作为ViewModel的属性值。

您的GET操作可以保持不变

public ActionResult Search() 
{
    CustomerModels objCustomer = new CustomerModels();
    var dataval = objCustomer.getData(); 
    // Assuming this method returns the CustomerViewModel object 
    //and we will pass that to the view.

    return View(dataval);
}

所以你的视图就像

@model CustomerViewModel
@using (Html.BeginForm())
{
  @Html.LabelFor(x=>x.Name)
  @Html.TextBoxFor(x=>x.Name)
  <input type="submit" value="Save" /> 
}

并拥有 POST 操作方法来处理此

[HttpPost]
public ActionResult Search(CustomerViewModel model)
{
  if(ModelState.IsValid)
  {
    string name= model.Name;

   //  you may save and redirect here (PRG pattern)
  }
  return View(model);

}

假设您的GET Action方法中的objCustomer.getData()方法返回CustomerViewModel的对象,该对象具有Name这样的属性

public class CustomerViewModel
{
  public string Name { set;get;}
  //other properties as needed
}

答案 1 :(得分:0)

您可以在Search操作中添加一个接受CustomerModel类型对象的参数。这样,当您将某些内容发布回控制器时,模型绑定器将从表单中获取数据并生成CustomerModels类型的对象,然后您可以在操作中使用该对象。为此你需要做两件事:

  1. 您的视图应该会收到CustomerModels类型的模型
  2. 您的行动应该是这样的公共ActionResult搜索(CustomerModels模型)
  3. 如果您不想更改视图,也就是说,您不希望将模型传递到您的页面,您可以尝试在控制器中使用TryUpdateModel,或者将FormCollection对象传递给Search操作,然后查询那个集合。