【问题标题】:Why Ajax.BeginForm does not pass form values?为什么 Ajax.BeginForm 不传递表单值?
【发布时间】:2011-11-26 14:44:09
【问题描述】:

我试图通过调用 Ajax.BeginForm 来显示部分视图,但我无法接收表单的值(我需要在控制器中获取隐藏输入 bookId 的值,例如 5)。

// 查看

@using (Ajax.BeginForm("Detail", "Books", new AjaxOptions { HttpMethod = "GET",         UpdateTargetId = "ShowBookDiv" }))
{ 
    <input type="hidden" id="bookId" value="5" />
    <input type="submit" id="sBtn" value="Details"  />
}

// 控制器

[HttpGet]
public ActionResult Detail(string bookId)
{                               
    if (Request.IsAjaxRequest())    
    {
        var a = Request["bookId"].ToString();
        // some code to get details
        return PartialView("ShowBooks", details);
    }
    ...
}

当我跟踪控制器中的代码时 bookId 为空!

【问题讨论】:

  • 看看生成的html...怎么看表单?

标签: asp.net-mvc asp.net-mvc-3 asp.net-ajax


【解决方案1】:

Ajax.BeginForm 很痛苦,IMO。

我会使用来自 JQuery Ajax API 的$.ajax

http://api.jquery.com/jQuery.ajax

这是一个很好的例子,你可以看看它是如何工作的:

http://www.tugberkugurlu.com/archive/working-with-jquery-ajax-api-on-asp-net-mvc-3-0-power-of-json-jquery-and-asp-net-mvc-partial-views

发布整个表单需要一些工作(在验证等方面),但如果您精通 JavaScript,您将可以完全控制操作。

【讨论】:

  • Ajax.BeginForm 在没有任何 JavaScript 的情况下做同样的事情
【解决方案2】:

我已将“名称”属性添加到隐藏字段,它可以正常工作!!!真奇怪!

 <input type="hidden" name="bookId" id="bookId" value="5" />

【讨论】:

  • 一点也不奇怪。属性 Name 是 ModelBinder 用来将表单输入绑定到您的模型
猜你喜欢
  • 1970-01-01
  • 2021-07-31
  • 1970-01-01
  • 2017-08-08
  • 2013-10-18
  • 2020-07-03
  • 2012-10-17
  • 1970-01-01
  • 2015-03-24
相关资源
最近更新 更多