2

这里有大问题!我知道标题有点模糊,但是我整天都遇到这个问题,无法弄清楚如何解决它。我会尽量以不那么混乱的方式更具体。长话短说,我有一个控制器(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);
    }

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

@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 & Javascript 的行为。长话短说,似乎视图,加载本身,进入 js 函数以缓存模型编码,但它并没有完全运行该函数!我在感兴趣的模型中遇到了问题。我不知道我是否解释过自己,但警告是:在做任何其他事情之前要小心你的模型一致性。感谢任何帮助过我的人,在我意识到我完全错了之前!

4

2 回答 2

1

这是您应该如何处理多个提交按钮

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

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

现在转到控制器,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
        }
...
}

希望这对你有帮助!

更新 :

从您的评论中,

嗨,我知道这个解决方法,我的问题是第二次提交不必通过控制器:它必须调用视图中的 javascript 函数。以正确的方式发布到控制器的第一篇文章,但它也运行了 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>
于 2012-10-30T05:24:16.453 回答
0

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

于 2012-10-29T17:09:04.010 回答