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编码,但它并没有完全运行该函数!我感兴趣的模型中有一个问题。 我不知道自己是否解释过,但警告是:在做其他任何事情之前要小心你的模型一致性。 感谢任何帮助过我的人,在我意识到我完全错了之前!
答案 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"