Чтение 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 в вашем представлении, чтобы получить значение, но на самом деле нет причин делать это таким образом.

Другие вопросы по тегам