如何根据来自控制器的查询结果显示警报?
How to display alert based on query results from controller?
我在视图中通过 ajax 调用控制器中的方法。此方法运行查询以查看通过 ajax 传递给该方法的值是否位于数据库中。我需要的结果是在找到该值时向用户显示警报。我该怎么做?
控制器:
[HttpPost]
public ActionResult ScannerProcess(string jobnumber, string programname, string description)
{
try
{
var _process = new ScannerProcess();
_process.JobNumberExist(jobnumber);
}
catch (Exception e)
{
Debug.WriteLine("ERROR: " + e.Message);
throw;
}
return null;
}
方法:
public void JobNumberExist(string jobnumber)
{
using (var ctx = new Scanner())
{
bool results = false;
var sql = ctx.Database.SqlQuery<tScanner>(@"SELECT * FROM tScanner
WHERE (JobNumber = @jobnumber)"
, new SqlParameter("@jobnumber", jobnumber)).ToList();
if (sql.Count > 0)
{
//Display alert on view that job number was found
}
}
}
Ajax:
$.ajax({
type: "POST",
url: "ScannerProcess",
data: { programname: $('#programName').val(), jobnumber: $('#jobNumber').val(), description: $('#description').val() }
})
.done(function (data, textStatus, jqXHR) {
})
.fail(function (jqXHR, textStatus, errorThrown) {
})
.always(function (jqXHR, textStatus, errorThrown) {
});
来自控制器操作 return JsonResult,如下所示:
[HttpPost]
public ActionResult ScannerProcess(string jobnumber, string programname, string description)
{
try
{
var _process = new ScannerProcess();
var foundNumber = _process.JobNumberExist(jobnumber);
// If you don't want to add status message in Action as its "view" specific, you can add message based on combination of DidSucceed and foundNumber property check in javascript as shown below.
var message = foundNumber ? "Number Found Successfully" : "Number not found";
return Json(new { DidSucceed = true, status = "success", message = message, foundNumber = foundNumber }, JsonRequestBehavior.AllowGet);
}
catch (Exception e)
{
Debug.WriteLine("ERROR: " + e.Message);
// throw; // Since this action is invoked via AJAX, I would say throwing exceptions is not a good practice.
return Json(new { DidSucceed = false, status = "error", message = "Unknown Exception Occured." }, JsonRequestBehavior.AllowGet);
}
return null;
}
修改 JobNumberExist 方法的签名(只是一个旁注,它对 运行 查询的不良做法。请参考 DBContext 如何执行查询)为 return true 或 false
public **bool** JobNumberExist(string jobnumber)
{
using (var ctx = new Scanner())
{
bool results = false;
var sql = ctx.Database.SqlQuery<tScanner>(@"SELECT * FROM tScanner
WHERE (JobNumber = @jobnumber)"
, new SqlParameter("@jobnumber", jobnumber)).ToList();
return sql.Count > 0 ;
}
}
来自javascript:
$.ajax({
type: "POST",
url: "ScannerProcess",
contentType: "application/json; charset=utf-8",
data: { programname: $('#programName').val(), jobnumber: $('#jobNumber').val(), description: $('#description').val() }
})
.done(function (data, textStatus, jqXHR) {
if ($.isPlainObject(data) && !data.DidSucceed) {
// Display error message in your respective DIV
}
else {
if (data.foundNumber === true) {
// Display your own success message or display data.message which is added in MVC action
}
else {
// Display your own error message or display data.message which is added in MVC action
}
}
})
.fail(function (jqXHR, textStatus, errorThrown) {
})
.always(function (jqXHR, textStatus, errorThrown) {
});
我在视图中通过 ajax 调用控制器中的方法。此方法运行查询以查看通过 ajax 传递给该方法的值是否位于数据库中。我需要的结果是在找到该值时向用户显示警报。我该怎么做?
控制器:
[HttpPost]
public ActionResult ScannerProcess(string jobnumber, string programname, string description)
{
try
{
var _process = new ScannerProcess();
_process.JobNumberExist(jobnumber);
}
catch (Exception e)
{
Debug.WriteLine("ERROR: " + e.Message);
throw;
}
return null;
}
方法:
public void JobNumberExist(string jobnumber)
{
using (var ctx = new Scanner())
{
bool results = false;
var sql = ctx.Database.SqlQuery<tScanner>(@"SELECT * FROM tScanner
WHERE (JobNumber = @jobnumber)"
, new SqlParameter("@jobnumber", jobnumber)).ToList();
if (sql.Count > 0)
{
//Display alert on view that job number was found
}
}
}
Ajax:
$.ajax({
type: "POST",
url: "ScannerProcess",
data: { programname: $('#programName').val(), jobnumber: $('#jobNumber').val(), description: $('#description').val() }
})
.done(function (data, textStatus, jqXHR) {
})
.fail(function (jqXHR, textStatus, errorThrown) {
})
.always(function (jqXHR, textStatus, errorThrown) {
});
来自控制器操作 return JsonResult,如下所示:
[HttpPost]
public ActionResult ScannerProcess(string jobnumber, string programname, string description)
{
try
{
var _process = new ScannerProcess();
var foundNumber = _process.JobNumberExist(jobnumber);
// If you don't want to add status message in Action as its "view" specific, you can add message based on combination of DidSucceed and foundNumber property check in javascript as shown below.
var message = foundNumber ? "Number Found Successfully" : "Number not found";
return Json(new { DidSucceed = true, status = "success", message = message, foundNumber = foundNumber }, JsonRequestBehavior.AllowGet);
}
catch (Exception e)
{
Debug.WriteLine("ERROR: " + e.Message);
// throw; // Since this action is invoked via AJAX, I would say throwing exceptions is not a good practice.
return Json(new { DidSucceed = false, status = "error", message = "Unknown Exception Occured." }, JsonRequestBehavior.AllowGet);
}
return null;
}
修改 JobNumberExist 方法的签名(只是一个旁注,它对 运行 查询的不良做法。请参考 DBContext 如何执行查询)为 return true 或 false
public **bool** JobNumberExist(string jobnumber)
{
using (var ctx = new Scanner())
{
bool results = false;
var sql = ctx.Database.SqlQuery<tScanner>(@"SELECT * FROM tScanner
WHERE (JobNumber = @jobnumber)"
, new SqlParameter("@jobnumber", jobnumber)).ToList();
return sql.Count > 0 ;
}
}
来自javascript:
$.ajax({
type: "POST",
url: "ScannerProcess",
contentType: "application/json; charset=utf-8",
data: { programname: $('#programName').val(), jobnumber: $('#jobNumber').val(), description: $('#description').val() }
})
.done(function (data, textStatus, jqXHR) {
if ($.isPlainObject(data) && !data.DidSucceed) {
// Display error message in your respective DIV
}
else {
if (data.foundNumber === true) {
// Display your own success message or display data.message which is added in MVC action
}
else {
// Display your own error message or display data.message which is added in MVC action
}
}
})
.fail(function (jqXHR, textStatus, errorThrown) {
})
.always(function (jqXHR, textStatus, errorThrown) {
});