2012-07-19 137 views
0

這是我的看法從視圖中傳遞值控制器MVC

<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();%> 
+0

您是否在視圖頂部添加@model行? – Shyju 2012-07-19 13:20:51

+0

<%@ Page Language =「C#」Inherits =「System.Web.Mvc.ViewPage >」%> @model CustomerModels <!DOCTYPE html PUBLIC「 - // W3C // DTD XHTML 1.0 Transitional // EN「」http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd「> – 2012-07-19 13:23:23

+0

這是正確的方式和放置@model --shyju – 2012-07-19 13:24:01

回答

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操作方法中的objCustomer.getData()方法OD返回CustomerViewModel對象具有Name屬性這樣

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

您可以將參數添加到接受型CustomerModels的對象你的搜索行動。通過這種方式,當您將某些內容發回控制器時,模型聯編程序將從表單中獲取數據並生成一個CustomerModel類型的對象,然後您可以在您的操作中使用該對象來處理。爲此你需要做兩件事情:

  1. 您的視圖應接收類型CustomerModels模型
  2. 你的行動應該是這樣的公衆的ActionResult搜索(CustomerModels模型)

如果你不您不想改變您的視圖,也就是說,您不想將模型傳遞到您的頁面,您可以嘗試在控制器中使用TryUpdateModel,或將FormCollection對象傳遞給您的搜索操作,然後查詢該集合。

相關問題