以下代码已重构为:
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);
}
这是ServiceName ViewData在其中一个视图中的使用方式:
<input type="hidden" id="txtServiceName" value="@(ViewData["ServiceName"])" />
重构后,服务名称未正确捕获,因为它已从字符串更改为JsonResult并且正在返回为&#34; System.Web.Mvc.JsonResult&#34;一直以来。
如下所示更改重构方法的返回类型可以解决问题:
public string GetServiceName(int serviceId)
{
WorkItemModel model = new WorkItemModel();
return model.ServiceCatalogModels.First(s => s.Id == serviceId).Title;
}
这是解决此问题的正确方法吗?还是有办法通过将返回类型保留为ActionResult并返回JsonResult来解决此问题?
答案 0 :(得分:0)
我会说更改GetServiceName以返回字符串是正确的解决方案。没有理由将其转换为JSON,因为MVC可以轻松处理将字符串(当然还有更复杂的类型)传递给模型。在我看来,JSON应该在MVC中主要用于不涉及模型绑定器的异步调用。
编辑:由于您使用ViewData而不是实际模型将此传递给您的视图,您可以(我认为)在您的视图中调用json反序列化器类来获取值,但是确实如此没理由这样做。