Доступ к значениям свойств объекта
Как я могу проверить, является ли "success" истинным или ложным в приведенном ниже коде? Я пытался с помощью следующего кода, но он не работает:
if (result["success"].Equals(false)) throw new Exception(result["message"].ToString());
if (result["message"].ToString().Contains("maximum limit reached")) throw new Exception(result["message"].ToString());
вот мои действия:
[HttpPost]
public ActionResult PostFile(string NewFileName, string FileNumber)
{
try
{
var result = ((JsonResult)(SaveFile(NewFileName, FileNumber))).ToDictionary();
if (result.Keys.Contains("message")) throw new Exception(result["message"].ToString());
//if (result["success"].Equals(false)) throw new Exception(result["message"].ToString());
return Content("success");
}
catch (Exception ex)
{
return Content(ex.ToString());
}
}
public ActionResult SaveFile(string status, string FileNumber)
{
try
{
var currentPath = ConfigurationManager.AppSettings["FilePath"];
string filename = FileNumber + ".pdf";
var ext = UploadHandler.SaveUploadedFile(Path.GetDirectoryName(currentPath), filename);
return Json(new { success = true }, "text/html");
}
catch (Exception ex)
{
return Json(new { success = false, message = ex.Message }, "text/html");
}
}
Любая помощь высоко ценится
2 ответа
Подход 1
private T GetValueFromJsonResult<T>(JsonResult jsonResult, string propertyName)
{
var property =
jsonResult.Data.GetType().GetProperties()
.Where(p => string.Compare(p.Name, propertyName) == 0)
.FirstOrDefault();
if (null == property)
throw new ArgumentException(propertyName + "not found", propertyName);
return (T)property.GetValue(jsonResult.Data, null);
}
Boolean testValue = GetValueFromJsonResult<bool>(abc(), "Success");
private JsonResult abc()
{
return Json(new { Success = true }, JsonRequestBehavior.AllowGet);
}
Подход 2
$.ajax({
url: 'ControllerName/PostFile',
data: JSON.stringify({ NewFileName: "FileName", FileNumber: "12" }),
type: 'POST',
contentType: 'application/json, charset=utf-8',
dataType: 'json',
beforeSend: function (xhr, opts) {
}
}).done(function (data) {
if(data.success) {
alert('ok');
}
});
Вы можете выделить свою логику и объединить методы, используя Request.IsAjaxRequest()
метод.
private void UploadFile(string status, string fileNumber)
{
var currentPath = ConfigurationManager.AppSettings["FilePath"];
string filename = fileNumber + ".pdf";
UploadHandler.SaveUploadedFile(Path.GetDirectoryName(currentPath), filename);
}
[HttpPost]
public ActionResult PostFile(string newFileName, string fileNumber)
{
var isAjax = Request.IsAjaxRequest();
try
{
UploadFile(newFileName, fileNumber);
}
catch (Exception ex)
{
if(isAjax)
{
return Json(new { success = false, message = ex.Message }, "text/html");
}
return Content(ex.ToString());
}
if(isAjax)
{
return Json(new { success = true }, "text/html");
}
return Content("success");
}
Звонок из Javascript:
$.ajax({
type: 'POST',
url: 'Controller/PostFile',
data: { newFileName = '', fileNumber = '' },
success: function(content) {
}
});