2015-10-16 42 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. 
    } 
相关问题