【问题标题】:FormCollection returns a null value in mvcFormCollection 在 mvc 中返回一个空值
【发布时间】:2015-02-07 18:25:36
【问题描述】:
[HttpGet]
    public ActionResult Index()
    {

        return View();
    }

    [HttpPost]
    public ActionResult Index(FormCollection fc)
    {
        String sc = fc["SearchString"]; 
        return RedirectToAction("SearchFromObject", new { id = sc });
    }

    public ActionResult SearchFromObject(string searchString)
    {
        var Items = from m in db.Objects
                    select m;
        if (!String.IsNullOrEmpty(searchString))
        {
            Items = Items.Where(s => s.Name.Contains(searchString));
        }
        return View(Items);
    }

此代码返回字符串 sc 的空值。为什么??在我看来,有一个文本框。我想在单击按钮并检索与搜索关键字相关的数据时将该值作为参数传递给 SearchFromObject 方法。这是我的观点

@{
ViewBag.Title = "Search";
}

<h2>Search</h2>
<p>

@using (Html.BeginForm())
{<p>
    Title: @Html.TextBox("SearchString") <br />
    <input type ="submit" value="Search" />
</p>
}

【问题讨论】:

  • 你能显示你的视图的渲染 html 吗?现在对我来说还可以。

标签: c# asp.net-mvc formcollection


【解决方案1】:

你的方法

public ActionResult SearchFromObject(string searchString)

有一个名为searchString 的参数,但在Index() POST 方法中,您尝试使用new { id = sc } 传递一个名为id 的参数。它不是sc 的值null,而是第二个GET 方法中searchString 的值null

将 POST 方法签名更改为

[HttpPost] public ActionResult Index(string SearchString)
{
  return RedirectToAction("SearchFromObject", new { searchString = SearchString});
}

【讨论】:

    【解决方案2】:

    像这样指定您的发布方法、控制器名称和表单操作:

    @using (Html.BeginForm("Index", "Default1", FormMethod.Post))
    {    
      <p>
      Title: @Html.TextBox("SearchString") <br />
      <input type ="submit" value="Search" />
    </p>
    }
    

    【讨论】:

    • @using (Html.BeginForm()) 将添加与您所做的完全相同的默认值(假设控制器名称为Default1Controller),因此除非您指定不同的控制器或操作,否则这是不必要的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-09
    • 2021-12-03
    • 2014-02-11
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多