ASP.NET MVC提交表单调用另一个提交表单的javascript函数

时间:2012-10-29 16:50:09

标签: javascript asp.net-mvc jquery razor submit

这里有个大问题!我知道标题有点模糊,但是这一整天我都遇到了这个问题,无法弄清楚如何解决它。 我会尝试以较不凌乱的方式更具体。 长话短说,我有一个Controller(LeadController),带有搜索方法(Search):

 public ActionResult Search(string prov = null, string city = null)
    {
        //if no field is compiled, return an empty view
        if (String.IsNullOrWhiteSpace(prov) && String.IsNullOrWhiteSpace(city))
            return View();

        var leads = from l in db.Leads
                    select l;

        if (!String.IsNullOrWhiteSpace(prov))
        {
            leads = leads.Where(l => l.Prov == prov).OrderBy(l => l.RagioneSoc);
        }

        if (!String.IsNullOrWhiteSpace(city))
        {
            leads = leads.Where(l => l.Comune == city).OrderBy(l => l.RagioneSoc);
        }

        return View(leads);
    }

然后我有2个提交表单的搜索视图(显示填写搜索的字段和后期操作后的结果):第一个执行搜索

@using (Html.BeginForm()){
Sigla Provincia: @Html.TextBox("prov", null, new { @style = "width: 50px;"})
Città: @Html.TextBox("city", null, new { @style = "width: 150px;" })
<input type="submit" value="Ricerca" data-icon="search" data-role="button" data-mini="true" data-inline="true" />}

和第二个从搜索操作的潜在客户结果生成文档

<input type="submit" title="create doc" value="Create document" onclick="javascript:postData()" id="doc" />

最后一次提交应调用javascript函数对模型进行编码:

<script type="text/javascript">
function postData() {
    var urlact = '@Url.Action("createDoc")';
    var model = '@Html.Raw(Json.Encode(Model))';

    $.ajax({
        ...
        ...
    });
}
</script>

现在,问题是:当我调用第一个提交时,应该执行研究的那个,它执行研究但它也继续进行,调用 postData() javascript函数(即使我从不“告诉”他这样做。并且该站点停止在 var model = @ Html.Raw(Json.Encode(Model))'; 中工作,并带有InvalidOperationException。

如果有人理解我的问题,有没有办法避免这种行为,并强制第一次提交只传递控制器参数来执行搜索操作?

希望有人可以帮助我, 提前谢谢你的考虑!


解决

嗯,问题已经消失了。显然,我不太了解View&amp; Javascript行为。长话的衬衫,似乎是View,加载自身,进入js函数以便缓存Model编码,但它并没有完全运行该函数!我感兴趣的模型中有一个问题。 我不知道自己是否解释过,但警告是:在做其他任何事情之前要小心你的模型一致性。 感谢任何帮助过我的人,在我意识到我完全错了之前!

2 个答案:

答案 0 :(得分:1)

以下是处理多个提交按钮的方法

下面是一个带有两个提交按钮的表单。请注意,这两个提交按钮具有相同的名称,即“submitButton”

@Html.BeginForm("MyAction", "MyController"); %>
<input type="submit" name="submitButton" value="Button1" />
<input type="submit" name="submitButton" value="Button2" />
}

现在转到Controller,Action接受一个名为string stringButton的输入参数,其余的都是不言自明的。

public ActionResult MyAction(string submitButton) {
        switch(submitButton) {
            case "Button1":
               // do something here
            case "Button2":
               // do some other thing here
            default:
                // add some other behaviour here
        }
...
}

希望这能帮到你!

更新:

来自您的评论,

  

嗨,我知道这个解决方法,我的问题是第二次提交不必通过Controller:它必须在View中调用javascript函数。以正确的方式向Controller发送第1个帖子,但是它也运行了javascript函数。

好的,您可以使用一个提交按钮而不是另外两个提交按钮,而不是两个提交按钮。 例如: -

@Html.BeginForm("MyAction", "MyController"); %>
<input type="submit" name="submitButton" value="Button1" />
<input type="button" id="otherButton" value="Button2" />
}

然后使用一些简单的jquery,你可以调用javascript函数postData()

<script type="text/javascript">
    $("#otherButton").bind("click", function () {
        console.log("do your stuff here");
        postData();

    });
</script>

答案 1 :(得分:0)

尝试将您的第二次提交从<input type="submit"更改为<input type="button"