Здравствуйте, я хочу вставить данные через функцию json, но когда я нажимаю кнопку сохранения, тогда функция json не вызывает функцию mItem_Insert и показывает ошибку в интерфейсе Ошибка: функция Error () {[собственный код]}, и я использую вкладку, содержащую 2 вкладки, одна для элементов, а другая - категория элементов, а также отображается на эта страница jqgrid. любезно скажите мне, в чем проблема в этом коде и почему отображается эта ошибка.
Javascript
<script>
function mSaveItem() {
$.ajax({
url: "@Url.Action("mItem_Insert")",
type: "POST",
contentType: "application/json;charset=UTF-8",
data: {
CatCode:$('#txtNCatCode').val(),
CatDesc: $('#txtNCategoryDesc').val(),
HS_Code: $('#txtNHsCode').val(),
PurCode: $('#txtNPurCode').val(),
SaleCode: $('#txtNSaleCode').val(),
CostOfSaleCode: $('#txtNCostOfSaleCode').val(),
SaleCode_Trade:$('#txtNSaleCode_Trade').val(),
CostOfSaleCode_Trade: $('#txtNCostOfSaleCode_Trade').val()
},
dataType: "json",
success: function (Record) {
if (Record.d == true) {
$('#Result').text("Your Record inserted");
}
else {
$('#Result').text("Your Record Not Insert");
}
},
error: function (errormessage) {
$('#Result').text("Error: " + Error);
}
});
return false;
}
</script>
HTML
<main class = "pt-5 mx-lg-5">
<div class = "container-fluid mt-5">
<!-- Nav tabs -->
<ul class = "nav nav-tabs md-tabs nav-justified indigo" role = "tablist" >
<li class = "nav-item" style = "background-color:#007bff">
<a class = "nav-link active" data-toggle = "tab" href = "#panel5" role = "tab"> Items</a>
</li>
<li class = "nav-item" style = "background-color:#007bff">
<a class = "nav-link" data-toggle = "tab" href = "#panel6" role = "tab"><span class = "glyphicon glyphicon-folder-open"></span> Items Category</a>
</li>
</ul>
<!-- Items Tab panels -->
<div class = "tab-content">
<!--Panel 1-->
<div class = "tab-pane fade in show active" id = "panel5" role = "tabpanel">
<br>
<button type = "button" id = "AddNew" value = "1" class = "btn btn-primary" data-toggle = "modal" data-target = "#centralModalLGInfoDemo" style = "float:left">Add New</button>
<div class = "table-responsive">
<table id = "jqGrid" class = "table table-bordered table-striped"></table>
<div id = "jqGridPager"></div>
</div>
</div>
<!--/.Panel 1-->
<!--Items Model-->
<!--Panel 2-->
<div class = "tab-pane fade" id = "panel6" role = "tabpanel">
<br>
<button type = "button" id = "AddNew" value = "1" class = "btn btn-primary" data-toggle = "modal" data-target = "#ItemModel" style = "float:left">Add New Category</button>
<div class = "table-responsive">
<table id = "jqItemCatgoryGrid" class = "table table-bordered table-striped"></table>
<div id = "jqGridItemCatgoryPager"></div>
</div>
<form action = "" method = "post">
<div class = "modal fade left" id = "ItemModel" tabindex = "-1" role = "dialog" aria-labelledby = "myModalLabel" aria-hidden = "true"
data-backdrop = "false">
<div class = "modal-dialog modal-side modal-top-left modal-notify modal-info" role = "document">
<!--Content-->
<div class = "modal-content" style = "margin-left:68%;">
<!--Header-->
<div class = "modal-header">
<p class = "heading lead">Add New Item Category</p>
<button type = "button" class = "close" data-dismiss = "modal" aria-label = "Close">
<span aria-hidden = "true" class = "white-text">×</span>
</button>
</div>
<!--Body-->
<div class = "modal-body" style = "width:80%">
<h3 id = "Result"></h3>
<div class = "form-row">
<div class = "col">
<!-- Requisition Req_NO -->
<div class = "md-form">
<label id = "txtDetailReq_ID">Category Code</label>
@Html.TextBox("CatCode", (string)ViewBag.Category, new { @class = "form-control mr-sm-3", @id = "txtNCatCode", Required = true })
</div>
</div>
<div class = "col">
<!-- Requisition Date -->
<div class = "md-form">
@Html.TextBoxFor(m => m.CatDesc, new { @class = "form-control mr-sm-3", @id = "txtNCategoryDesc", @placeholder = "Item Description", Required = true })
<label for = "lblItemDesc">Category Description</label>
</div>
</div>
</div>
<div class = "form-row">
<div class = "col">
<!-- Requisition Date -->
<div class = "md-form">
@Html.TextBoxFor(m => m.HS_Code, new { @class = "form-control mr-sm-3", @id = "txtNHsCode", @placeholder = "HS Code" })
<label for = "lblHsCode">HS Code</label>
</div>
</div>
<div class = "col">
<!-- Requisition Date -->
<div class = "md-form">
@Html.TextBoxFor(m => m.PurCode, new { @class = "form-control mr-sm-3", @id = "txtNPurCode", @placeholder = "Pur Code", Required = true })
<label for = "lblRequisitionDatepicker">Pur Code</label>
</div>
</div>
<div class = "col">
<!-- Job -->
<div class = "md-form">
<input type = "text" id = "PurCodeDescription" class = "form-control mr-sm-5" />
<label for = "lbljob">Description</label>
</div>
</div>
</div>
<div class = "form-row">
<div class = "col">
<div class = "md-form">
@Html.TextBoxFor(m => m.SaleCode, new { @class = "form-control mr-sm-3", @id = "txtNSaleCode", @placeholder = "Sale Code" })
<label for = "lblNsaleCode">Sale Code</label>
</div>
</div>
<div class = "col">
<!-- Job -->
<div class = "md-form">
<input type = "text" id = "SaleCodeDescription" class = "form-control mr-sm-5" />
<label for = "lblSaleCodeDesc">Description</label>
</div>
</div>
</div>
<div class = "form-row">
<div class = "col">
<!-- Requisition Date -->
<div class = "md-form">
@Html.TextBoxFor(m => m.CostOfSaleCode, new { @class = "form-control mr-sm-3", @id = "txtNCostOfSaleCode", @placeholder = "Cost Of Sale Code" })
<label for = "lblNCostOfSaleCode">Cost of Sale Code</label>
</div>
</div>
<div class = "col">
<!-- Job -->
<div class = "md-form">
<input type = "text" id = "CostOfSaleCodeDescription" class = "form-control mr-sm-5" />
<label for = "lblNCostOfSaleCodeDescription">Description</label>
</div>
</div>
</div>
<h6 style = "color:black; display:none">For Trade Only</h6>
<div class = "form-row" style = "display:none">
<div class = "col">
<div class = "md-form">
@Html.TextBoxFor(m => m.SaleCode_Trade, new { @class = "form-control mr-sm-3", @id = "txtNSaleCode_Trade", @placeholder = "Sale Code Trade" })
<label for = "lblNSaleCode_Trade">Sale Code</label>
</div>
</div>
<div class = "col">
<!-- Job -->
<div class = "md-form">
<input type = "text" id = "SaleCodeDescriptionTrad" class = "form-control mr-sm-5" />
<label for = "lblNCostOfSaleCodeDescriptionTrade">Description</label>
</div>
</div>
</div>
<div class = "form-row" style = "display:none">
<div class = "col">
<div class = "md-form">
@Html.TextBoxFor(m => m.CostOfSaleCode_Trade, new { @class = "form-control mr-sm-3", @id = "txtNCostOfSaleCode_Trade", @placeholder = "Cost Of Sale Code Trade" })
<label for = "lblNCostOfSaleCodeTrade">Cost Of Sale Code Trade</label>
</div>
</div>
<div class = "col">
<!-- Job -->
<div class = "md-form">
<input type = "text" id = "CostSaleCodeDescT" class = "form-control mr-sm-5" />
<label for = "lblNCostOfSaleCodeTradeDesc">Description</label>
</div>
</div>
</div>
<div class = "justify-content-center">
<div class = "modal-footer">
<button type = "reset" class = "btn btn-default" data-dismiss = "modal">Close</button>
<button id = "btnItemSave" type = "submit" class = "btn btn-danger " onclick = "mSaveItem()">Save</button>
</div>
</div>
</div>
<!-- Default form contact -->
</div>
<!--Footer-->
</div>
<!--/.Content-->
</div>
</form>
</div>
<!--/.Panel 2-->
</div>
</div>
</main>
Функция Json в C# #region Items Insert
public JsonResult mItem_Insert(Items objItem)
{
try
{
objclsItems.ItemsInsert(objItem);
ModelState.Clear();
return Json("", JsonRequestBehavior.AllowGet);
}
catch (Exception)
{
throw;
}
}
public int ItemsInsert(Items mitem)
{
try
{
con.Open();
tr = con.BeginTransaction();
cmd = new SqlCommand("Select Right('000' + Cast(ISNULL(MAX(CatCode),0)+1 as varchar(2)) + '', 3) from ItemCategory", con);
cmd.Transaction = tr;
string Cat_Code = cmd.ExecuteScalar().ToString();
cmd = new SqlCommand("Sp_ItemCategoryInsert", con);
cmd.Parameters.AddWithValue("@CatCode", Cat_Code);
cmd.Parameters.AddWithValue("@Comp_Id", 1);
if (mitem.CatDesc != null)
cmd.Parameters.AddWithValue("@CatDesc", mitem.CatDesc);
else
cmd.Parameters.AddWithValue("@CatDesc", string.Empty);
if (mitem.PurCode != null)
cmd.Parameters.AddWithValue("@PurCode", mitem.PurCode);
else
cmd.Parameters.AddWithValue("@PurCode", string.Empty);
if (mitem.SaleCode != null)
cmd.Parameters.AddWithValue("@SaleCode", mitem.SaleCode);
else
cmd.Parameters.AddWithValue("@SaleCode", string.Empty);
if (mitem.CostOfSaleCode != null)
cmd.Parameters.AddWithValue("@CostOfSaleCode", mitem.CostOfSaleCode);
else
cmd.Parameters.AddWithValue("@CostOfSaleCode", string.Empty);
if (mitem.SaleCode_Trade != null)
cmd.Parameters.AddWithValue("@SaleCode_Trade", mitem.SaleCode_Trade);
else
cmd.Parameters.AddWithValue("@SaleCode_Trade", string.Empty);
if (mitem.CostOfSaleCode_Trade != null)
cmd.Parameters.AddWithValue("@CostOfSaleCode_Trade", mitem.CostOfSaleCode_Trade);
else
cmd.Parameters.AddWithValue("@CostOfSaleCode_Trade", string.Empty);
if (mitem.HS_Code != null)
cmd.Parameters.AddWithValue("@HS_Code", mitem.HS_Code);
else
cmd.Parameters.AddWithValue("@HS_Code", string.Empty);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Transaction = tr;
cmd.ExecuteNonQuery();
tr.Commit();
return i;
}
catch (SqlException sqlex)
{
tr.Rollback();
throw sqlex; // read all sql error
}
catch (Exception ex)
{
tr.Rollback();
throw ex; // General execption
}
finally
{
con.Close();
}
}
все еще такая же проблема, я удаляю эту строку.
Удалить? Вместо этого я предложил $('#Result').text("Error: " + errormessage); ... тогда вы получите полезное сообщение об ошибке - без полезного сообщения об ошибке меньше шансов помочь вам
Я заметил type: "POST" в вашем AJAX, вы указываете атрибут [HttpPost] для метода действия mItem_Insert? Если вы не укажете это, ваш вызов AJAX никогда не достигнет контроллера, поскольку по умолчанию он использует GET.
Проблема решена . Когда я использую GET. Как я могу это сделать, если выбрать категорию элемента и вернуть вкладку категории элемента. после вставки данных.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


я изменил ваш код сообщением
$.post("@Url.Action("mItem_Insert")",
{
CatCode: $('#txtNCatCode').val(),
CatDesc: $('#txtNCategoryDesc').val(),
HS_Code: $('#txtNHsCode').val(),
PurCode: $('#txtNPurCode').val(),
SaleCode: $('#txtNSaleCode').val(),
CostOfSaleCode: $('#txtNCostOfSaleCode').val(),
SaleCode_Trade: $('#txtNSaleCode_Trade').val(),
CostOfSaleCode_Trade: $('#txtNCostOfSaleCode_Trade').val()
},
function (record) {
if (record.d === true) {
$('#Result').text("Your Record inserted");
}
else {
$('#Result').text("Your Record Not Insert");
}
}).fail(function(response) {
$('#Result').text("Error: " + response.responseText);
});
onclick (), я вызываю эту функцию, которую вы можете увидеть в кнопке сохранения.
Все еще та же проблема.
Можете ли вы попробовать еще раз, пожалуйста.
Он работает, и вы можете сказать мне, что у меня есть две вкладки, когда вкладка два выбирается, что означает категорию элемента, нажмите кнопку добавления новой и всплывающее окно, затем нажмите кнопку «Сохранить» после обновления страницы по умолчанию, выбрана вкладка 2.
Как я могу это сделать, если выбрать категорию элемента и вернуть вкладку категории элемента. после вставки данных.
Ваш URL-адрес должен быть @Url.Action("mItem_Insert","ControllerName"). где имя контроллера - это имя вашего контроллера.
Кроме того, вместо использования @Url.Action непосредственно в jquery, вы всегда можете назначить его атрибуту элемента data-url, а в jquery извлечь этот url и использовать его в ajax:
<div id = "urlDiv" data-url = "@Url.Action(blahblah)"></div>
<script>
var url = $('#urlDiv').data('url');
console.info(url); // test that url is correct
$.ajax({
url:url
...
});
</script>
error: function (errormessage) { $('#Result').text("Error: " + Error); }- каково значениеerrormessage- сообщение, которое вы получаете, связано с тем, чтоErrorявляется встроенной функцией, поэтому использование этого бесполезно для отладки - используйте переданный вerrormessage, тогда ваша отладка может продолжаться