mvc3: html.beginform search returning empty querystring

浪子不回头ぞ 提交于 2019-12-12 14:09:34

问题


In an MVC3 app, i have the following View:

@using (Html.BeginForm("Index", "Search", new {query = @Request.QueryString["query"]}, FormMethod.Post))
{
   <input type="search" name="query" id="query" value="" />
}

When i type in the url "/Search?query=test", Request.Querystring in my Index action reads out the search-value perfectly well (i have my routes set to ignore the Action in the url). When i type it in the seachbox, it hits the right action and controller (so the routing seems fine) but the querystring remains empty. What am i doing wrong?


回答1:


The Problem is that you are look in the Request.QueryString collection. But you are doing a POST so the query value is in the Request.Form Collection. But i think you want your TextBox filled with the data so can do it like in my sample.

Sample

@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
   <input type="search" name="query" id="query" value="@Request.Form["query"]" />
}

But this is not the real MVC approach. You should create a ViewModel for that.

Model

namespace MyNameSpace.Models
{
    public class SearchViewModel
    {
        public string Query { get; set; }
    }
}

View

@model MyNameSpace.Models.SearchViewModel

@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
   @Html.TextBoxFor(x => x.Query)
   <input type="submit" />
}

Controller

public ActionResult Index()
{
    return View(new SearchViewModel());
}

[HttpPost]
public ActionResult Index(SearchViewModel model)
{
    // do your search
    return View(model);
}


来源:https://stackoverflow.com/questions/9279741/mvc3-html-beginform-search-returning-empty-querystring

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!