【发布时间】:2014-07-20 13:15:52
【问题描述】:
我有一个 .cshtml 页面,其中包含作为带有实体框架的 MVC 的一部分的表单。
当我单击提交按钮时,表单正确提交。如果我使用 jquery 来模拟单击提交按钮,则表单会正确提交。如果我使用 AJAX 将表单发布到控制器,它就可以工作。但是我尝试过的任何 $('form').submit() 变体都会返回错误:
SyntaxError:JSON.parse:JSON 数据的第 1 行第 1 列出现意外字符。
显然我可以使用其他方法之一来提交表单,但我只是好奇为什么 .submit() 不起作用。
这是我的 .cshtml 页面:
@model MVC.ViewModels.OrderView
@{
ViewBag.Title = "Orders";
}
<div id="autosuggest_pricelist"></div>
<script type="text/javascript" src="@Url.Content("~/Scripts/orders_edit.js")"></script>
@using (Html.BeginForm("Orders","PriceList", FormMethod.Post, new { id = "form1" })) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Orders</legend>
@Html.HiddenFor(model => model.OrderID)
<div class="columns">
<div>
<div class="editor-label">
@Html.LabelFor(model => model.Supplier)
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.AssociateID,(SelectList) ViewBag.Suppliers)
@Html.ValidationMessageFor(model => model.AssociateID)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.OrderDate)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.OrderDate)
@Html.ValidationMessageFor(model => model.OrderDate)
</div>
</div>
<div>
<div class="editor-label">
@Html.LabelFor(model => model.OrderStatus)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.OrderStatus)
@Html.ValidationMessageFor(model => model.OrderStatus)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.OrderNotes)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.OrderNotes)
@Html.ValidationMessageFor(model => model.OrderNotes)
</div>
</div>
</div>
<div class="clear">
<input class="inputlabel" style="width:15em;" disabled="disabled" value="Description" />
<input class="inputlabel" disabled="disabled"; value="Quantity" />
<input class="inputlabel" disabled="disabled"; value="Stock" />
<input class="inputlabel" disabled="disabled"; value="Received" />
<input class="inputlabel" disabled="disabled"; value="Invoiced" />
</div>
<div>
@Html.EditorFor(model=>model.OrderDetailView)
</div>
@Html.ActionLink("Related Invoices","OrdersToInvoices","AuditTrail",new {id=Model.OrderID},new{})
<p>
<input type="submit" value="Save" />
<input type = "button" value = "Import" id="import"/>
<input type="button" value="jquery submit" id="btnSubmit" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "OrderList", new { count = 10 })
</div>
下面的jquery返回错误:
$('#btnSubmit').click(function () {
try {
$('form').submit();
}
catch (err) {
alert(err)
}
})
而这会提交表单:
$.ajax({
type: "POST",
url: "/PriceList/Orders",
data: $('form').serialize(),
success: function () {
}
})
和
$('#id_of_submit_button').click();
如何查看每个实例中表单提交的 JSON 数据?比较提交按钮而不是 .submit() 提交的 Json 可能会告诉我发生了什么。
【问题讨论】:
-
你不能将
$('form').serialize()的结果粘贴到一个变量中并逐步通过你的Javascript 来查看结果吗? -
这将显示 ajax 帖子发送的内容。如何获取 .submit 函数发送的内容?
-
$('form').submit();不应该抛出错误......错误是什么? -
语法错误:JSON.parse:JSON 数据的第 1 行第 1 列出现意外字符。
-
这意味着 .submit 没有提交表单,而是触发了执行 ajax 的提交处理程序。该提交处理程序失败,并且由于您尚未将其提供给我们,因此我们无法帮助您找出原因。
标签: jquery json forms model-view-controller