将源从字符串更改为JsonResult类型后读取ViewData

时间:2015-04-04 19:21:15

标签: asp.net-mvc model-view-controller viewdata

以下代码已重构为:

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来解决此问题?

1 个答案:

答案 0 :(得分:0)

我会说更改GetServiceName以返回字符串是正确的解决方案。没有理由将其转换为JSON,因为MVC可以轻松处理将字符串(当然还有更复杂的类型)传递给模型。在我看来,JSON应该在MVC中主要用于不涉及模型绑定器的异步调用。

编辑:由于您使用ViewData而不是实际模型将此传递给您的视图,您可以(我认为)在您的视图中调用json反序列化器类来获取值,但是确实如此没理由这样做。