【问题标题】:Form won't post to controller表单不会发布到控制器
【发布时间】:2016-06-01 14:22:58
【问题描述】:

我正在使用 asp.net MVC5。我有一个页面显示了一个失败的简单材料列表,需要搜索功能。

为此,我使用了一个 Ajax 表单,取自一些小教程。我在另一个页面上使用了完全相同的方法并让它在那里工作,所以我复制了上述代码。

但现在我无法让它为我的生活工作。

问题是query 总是null。我得到它的唯一方法是在我的网址中添加?query=ben。这样我终于可以测试搜索栏的其他功能,效果很好。

.cshtml:

<div class="pure-form">
  @using (Ajax.BeginForm("Materiaal_Main", "Materiaal", 
    new AjaxOptions
      {
        HttpMethod = "GET",
        UpdateTargetId = "beheertable",
      }))
  {
    <input type="text" id="txtsearch" name="query" placeholder="Algemeen dynamisch zoeken..." AutoComplete="off" style="margin-bottom: 10px; position:relative; top: 3px;" value="@ViewBag.query" />
    <input type="submit" value="Search" class="ui button" />
  }
</div>

我的控制器:

public ActionResult Materiaal_Main(int? pageNum, string query)
{
  ViewBag.Title = "Materiaal_Main";
  ViewBag.Totaal = (from m in db.tbl_materiaal select m).Count();

  pageNum = pageNum ?? 0;
  query = query ?? "";
  ViewBag.IsEndOfRecords = false;

  if(pageNum == 0)
  {
    LoadAllMateriaalToSession();
  }

  if (Request.IsAjaxRequest())
  {
    var materiaal = GetMateriaalForPage(pageNum.Value, query);
    ViewBag.IsEndOfRecords = (materiaal.Any()) && ((pageNum.Value * LazyLoadingRows) >= materiaal.Last().Key);
    ViewBag.query = query;
    return PartialView("_MateriaalRow", materiaal);
  }
  else
  {
    ViewBag.Materiaal = GetMateriaalForPage(pageNum.Value, query);
    ViewBag.query = query;
    return View();
  }
}

注意事项:

  • 这个页面是另外一个表单,因为用户可以查看不同的材料来注册维护等等。我已经简单地把这个扔出页面来测试干扰,它没有任何区别。

  • 另一个页面(显示人员列表)的构建与我在此处提供的代码完全相同。此页面运行良好。

  • 这个页面和另一个页面都使用延迟加载,这解释了 pageNum。不用担心这个。

欢迎任何帮助,无论是发现错误的人,还是可以提供替代方案的人。

【问题讨论】:

    标签: asp.net ajax forms


    【解决方案1】:

    我找了好久,突然发现哪里不对劲,一脸苦逼。

    该方法不起作用,因为我有一个单独的 [HttpPost] 同名方法,它没有将任何值传递给另一个函数。长话短说:

    public ActionResult Materiaal_Main(int? pageNum, string query)
      { ... }
    
    [HttpPost]
    public ActionResult Materiaal_Main(FormCollection form)
      {...
        return RedirectToAction("Materiaal_Main", new { query = form["query"].ToString() });
      }
    

    修复它。

    【讨论】:

      猜你喜欢
      • 2016-10-03
      • 2013-11-10
      • 2012-12-26
      • 1970-01-01
      • 1970-01-01
      • 2015-08-12
      • 1970-01-01
      • 2017-11-10
      • 2015-02-14
      相关资源
      最近更新 更多