Html在MVC中默认隐藏文本

时间:2014-05-13 07:42:07

标签: html asp.net-mvc textbox

我的cshtml中有这个HTML代码:

<form method="get" action="@Url.Action("Index")">
  @(Html.TextBox("q", Model.Search.FreeSearch))
  <input type="submit" value="Search"/>
</form>

如何将此html文本框中的默认文本放入我的控制器。

例如,在开始时,这个文本框是空的,它必须返回到控制器的空值,但是当我输入一些内容时,例如JADA它必须返回到控制器:目的地:“JADA”(目的地将是默认的,这意味着此文本框将仅返回目标列中的值,对于信息而言非常多)。

我的路线:

using System.Web.Mvc;
using System.Web.Routing;

namespace AdminRole
{
    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
    }
}

从搜索中获取值的控制器:

 public ISolrQuery BuildQuery(SearchParameters parameters)
        {
            if (!string.IsNullOrEmpty(parameters.FreeSearch))
                return new SolrQuery(parameters.FreeSearch);
            return SolrQuery.All;
        }

        public SortOrder[] GetSelectedSort(SearchParameters parameters)
        {
           return new[] { SortOrder.Parse(parameters.Sort) }.Where(o => o != null).ToArray();
        }

真的感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

你可以这样做:

if(!String.IsNullOrWhiteSpace(Model.Search.FreeSearch))
    @(Html.TextBox("q", Model.Search.FreeSearch))
else
   @(Html.TextBox("q", Model.Search.FreeSearch, new { Value="Default Text Here"}))

答案 1 :(得分:1)

嗯,实际上你通过提供FreeSearch已经采取的方式:

@Html.TextBox("q", !string.IsNullOrEmpty(Model.Search.FreeSearch)
                   ? Model.Search.FreeSearch
                   : "Default"
                 , new { placeholder = "Placeholder text" }
              )

最后一行添加了html属性placeholder以在后台显示文本。此文本未提交给服务器。

更改路线:

routes.MapRoute(
    name: "Search",
    url: "Home/Search/{q}",
    defaults: new { controller = "Home", action = "Search", q = "Default value" }
    );