Чтение ViewData после изменения источника из строки в тип JsonResult
Код ниже был изменен как:
WorkItemModel model = new WorkItemModel();
ViewData["ServiceName"] = model.ServiceCatalogModels.First(s => s.Id == serviceId).Title;
Рефакторированный код:
ViewData["ServiceName"] = GetServiceName(serviceId);
public ActionResult GetServiceName(int serviceId)
{
WorkItemModel model = new WorkItemModel();
return Json(model.ServiceCatalogModels.First(s => s.Id == serviceId).Title);
}
Вот как ViewData ServiceName используется в одном из представлений:
<input type="hidden" id="txtServiceName" value="@(ViewData["ServiceName"])" />
После рефакторинга имя службы записывается неправильно, так как оно было изменено со строки на JsonResult и в настоящее время возвращается как "System.Web.Mvc.JsonResult".
Изменение типа возврата в рефакторинговом методе, как показано ниже, должно решить проблему:
public string GetServiceName(int serviceId)
{
WorkItemModel model = new WorkItemModel();
return model.ServiceCatalogModels.First(s => s.Id == serviceId).Title;
}
Это правильный способ исправить это или есть способ исправить это, сохраняя возвращаемый тип как ActionResult и возвращая JsonResult?
1 ответ
Я бы сказал, что изменение GetServiceName для возврата строки является правильным решением. Нет никакой причины конвертировать его в JSON, поскольку MVC может легко обработать передачу строки (а также, конечно, более сложных типов) в вашу модель. JSON, по моему мнению, должен использоваться в MVC главным образом для асинхронных вызовов, которые не связаны с механизмом связывания моделей.
РЕДАКТИРОВАТЬ: Так как вы передаете это своему представлению, используя ViewData, а не фактическую модель, вы можете (я думаю) вызвать класс json deserializer в вашем представлении, чтобы получить значение, но на самом деле нет причин делать это таким образом.