2015-10-16 32 views
0

我有我使用一個搜索頁面的簡單模型做一些驗證:獲取變量傳遞給我的控制器從一個文本框

 public class Search { 
     [Required] 
     [DisplayName("Tag Number")] 
     [RegularExpression("([1-9][0-9]*)", ErrorMessage = "Tag must be a number")] 
     public int HouseTag { get; set; } 

然後我有一個簡單的視圖,一個文本框和一個提交按鈕:

@model Search 

@{ 
    Layout = "~/_Layout.cshtml"; 
} 

@using (Html.BeginForm("Search", "Inquiry", FormMethod.Get)){ 
    @Html.LabelFor(m =>m.HouseTag) 
    @Html.TextBoxFor(m=>m.HouseTag, new { type = "Search", autofocus = "true", style = "width: 200px", @maxlength = "6" }) 

    <input type="submit" value="Search" id="submit"/> 

我控制器期待一個ID的參數:

[HttpGet] 
    public ActionResult Search(int id){ 
     ViewBag.Tag = id; 
     return View(); 
    } 

當我執行它一個數字我得到一個空值傳遞給控制器​​,導致事情炸燬。我正在使用模型來控制搜索框的一些屬性以進行驗證。我以前只是擁有@ Html.TextBox,並且返回正常,但是現在我添加了該模型,但它不返回任何內容。

回答

2

您可以將參數設置爲一個類型的搜索,然後在你的行動訪問屬性

[HttpGet] 
public ActionResult Search(Search model){ 
    ViewBag.Tag = model.HouseTag; 
    return View(); 
} 

如果是我的話我會想辦法讓這個HttpPost或創建此形式的單獨行動,所以我將不會在URL中看到HouseTag文字..

@using (Html.BeginForm("Search", "Inquiry", FormMethod.Post)) 
{ 
    @Html.LabelFor(m => m.HouseTag) 
    @Html.TextBoxFor(m => m.HouseTag, new { type = "Search", autofocus = "true", style = "width: 200px", @maxlength = "6" }) 

    <input type="submit" value="Search" id="submit" /> 
} 

[HttpPost] 
public ActionResult Search(Search model){ 
    ViewBag.Tag = model.HouseTag; 
    return View(); 
} 
0

您期待一個名爲id的參數,並且您傳遞HouseTag作爲該參數的名稱,您應該在搜索方法中將id重命名爲houseTag。

0

有一些事情在這裏發生。首先,您將要分割您的獲取和發佈操作。此外,表單只能與POST一起使用。除非您將帖子發送到不同的控制器或操作,然後發送GET,否則您也不需要爲您的操作或控制器命名。

這是得到。它呈現頁面上的表單。你不需要把[HttpGet]放在那裏,它是默認的。

public ActionResult Search() 
    { 
     return View(); 
    } 

以下是要將表單發回服務器。模型聯編程序將用您的視圖模型連接html表單字段。由於您在視圖模型上有驗證器,因此您需要檢查模型狀態是否有效,並重新顯示包含相關錯誤的視圖。您需要在視圖中添加@ Html.ValidationMessageFor(...),以便您真正看到這些錯誤。

[HttpPost] 
    public ActionResult Inquiry(Search search) 
    { 
     if (!ModelState.IsValid) 
     { 
      return View(search); 
     } 

     //so something with your posted model. 
    } 
相關問題