为什么Ajax.BeginForm不起作用?

时间:2013-08-07 14:30:56

标签: c# ajax asp.net-mvc

我看了几个类似的问题,但我无法让它发挥作用。

我在表单中有一些单选按钮。我没有选择选项并单击提交按钮,而是在用户单击单选按钮时提交表单。

所以我隐藏了提交按钮并放置了一个模拟按钮点击的javascript函数(我也尝试使用按钮点击它,但这似乎不是问题)。

在我的观点中,我有:

<script type="text/javascript" src="/Scripts/jquery-1.9.1/jquery-1.9.1.min.js" ></script>
<script type="text/javascript" src="/Scripts/jquery-1.9.1/jquery.unobtrusive-ajax.min.js"></script>

<script type="text/javascript">
    function change() {
        $('#buttonradio').click();
    }
</script>

<h2>Dashboard</h2>

<div class="Dashboard" id="itemsDshBrd" style="overflow:auto;height:97%;">

    <div id="DshBrdRadioGroup" style="float:right;font-size:small">   

        <% using (Ajax.BeginForm("Index", "DshBrd", new { value = 1 }, new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "stations" })) { %>

            <input class="radioclass" id="r1" name="radiogroup" type="radio" value="1" onclick="change()" checked/> A
            <input class="radioclass" id="r2" name="radiogroup" type="radio" value="2" onclick="change()"/> B     
            <input class="radioclass" id="r3" name="radiogroup" type="radio" value="3" onclick="change()"/> C
            <input class="radioclass" id="r4" name="radiogroup" type="radio" value="4" onclick="change()"/> D

            <input id="buttonradio" type="submit" value="Submit" style="visibility:hidden"/>

        <% } %>        

    </div>   

    <div id="stations">
        <% Html.RenderPartial("~/Views/DshBrd/Stations.ascx"); %>
    </div>

</div>

*我知道我发送的值= 1。

在我的控制器中我有:

[HttpPost]
public ActionResult Index(int value)
{
    if (Request.IsAjaxRequest())
    {
        return PartialView("~/Views/DshBrd/Stations.aspx");
    }

    return View("~/Views/DshBrd/Index.aspx");
}

Request.IsAjaxRequest()永远不会成真。

我的Web.Config也行:

<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

我认为你没有正确提交表格。

尝试完全删除提交按钮,并将更改代码替换为:

function change() {
    $("#DshBrdRadioGroup form").submit();
}

这听起来像你不引人注目的ajax无法正常工作。请检查以下内容:

  • 您的web.config应用设置中的ClientValidationEnabled为true。
  • UnobtrusiveJavaScriptEnabled在您的web.config应用设置中为true。
  • 您的页面上引用了jquery.unobtrusive-ajax.min.js脚本。

答案 1 :(得分:1)

我认为你的模块绑定器有这个问题。在您的操作中将变量名称更改为 radiogroup

答案 2 :(得分:0)

首先,您正试图通过AJAX从您所描述的内容中定期发帖。它永远不会是 true

所以,你需要使用类似http://malsup.com/jquery/form/的东西,这样可以很容易地从AJAX中完成。

使用AJAX进行提交后,您实际上不必在每个单选按钮元素中使用onclick。我会像下面这样做,假设那些单选按钮是使用类 radioclass 的唯一单选按钮:

$('.radioclass').click(function () {
    $(this).parents('form:first').trigger('submit');
});