2015-04-04 21 views
0

後在下面的代碼已被重構爲:雷丁的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用於其中一個視圖中:

<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?

+0

您的「重構」代碼沒有任何意義。 ViewData用於將模型中不存在的其他數據從控制器傳遞到視圖。您不要將JsonResult分配給ViewData。我建議您在開始開發應用程序之前閱讀有關MVC的更多信息。 – ataravati 2015-04-04 19:57:07

回答

0

我會說改變GetServiceName返回一個字符串是正確的解決方案。實際上沒有理由將其轉換爲JSON,因爲MVC可以輕鬆地將字符串(當然還有更復雜的類型)傳遞給您的模型。在我看來,JSON應該主要用於MVC,用於不涉及模型綁定器的異步調用。

編輯:由於您將此傳遞給您的視圖使用ViewData,而不是實際的模型,您可以(我認爲)在您的視圖中調用一個json反序列化器類來獲取值,但真的沒有理由去做這條路。

+0

謝謝,這有幫助! – SteelBird82 2015-04-04 20:33:44