我有一个运行webAPI的MVC方法,并以json格式返回一些问题和答案列表。我尝试在我的视图中显示这些数据。但它将它们显示为json格式并且根本不显示我的视图。我喜欢在桌子下面展示常见问题。 这是我的控制器方法:
[Route("showcontact")]
[HttpGet]
public async Task<ActionResult> ShowContact(int loanId)
{
string json = string.Empty;
List<Faq> FaqObject = null;
var responseApi = await httpClient.GetAsync(string.Format("{0}/{1}", CommonApiBaseUrlValue, "faqs"));
if (responseApi.IsSuccessStatusCode)
{
json = responseApi.Content.ReadAsStringAsync().Result;
FaqObject = new JavaScriptSerializer().Deserialize<List<Faq>>(json);
}
var response = new
{
success = FaqObject != null,
data = FaqObject
};
return Json(response, JsonRequestBehavior.AllowGet);
}
这是我的观点:
@model Carfinance.Loans.Web.ViewModels.HelpCenterViewModel
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script src="~/Scripts/HelpCenter/HelpCenter.js"></script>
<table>
<tr><td><h2>Contact Us</h2></td></tr>
<tr><td>FUNDING SPECIALIST:</td><td>PHONE & EMAIL:</td><td>HOURS:</td></tr>
</table>
这是我的js文件,用于显示json内容,但它根本不会显示此文件,因为即使警报未显示。
$(document).ready(function () {
alert("test");
var token = $('[name=__RequestVerificationToken]').val();
$.ajax({
dataType: "json",
//headers: { "__RequestVerificationToken": token },
url: '/showcontact',
type: 'GET',
cache: false,
success: function (result) {
jQuery.parseJSON(result);
},
error: function () { debugger; alert('failure'); }
});
});
这是我得到的而不是查看:
{
success: true,
data: [
{
Id: 1,
Category: "General",
Question: "Question1",
Answer: "Answer1"
},
{
Id: 2,
Category: "Stipulation related",
Question: "Question2",
Answer: "Answer2"
}
]
}
答案 0 :(得分:0)
你得到了数据,现在你只需要一个放置它的地方!
从您的代码中,我发现您的View
没有指定的元素来显示您从API中检索的数据。
尝试在Ajax调用中迭代结果,以构建您刚才请求的数据表。
答案 1 :(得分:0)
这是一种预期的行为,因为您要返回JsonResult
而不是ViewResult
的实例。
您需要重新考虑您的方法并定义您想要的Action返回:Json对象还是渲染视图? 如果您选择第一个选项,您的ajax回调必须处理json数据并使用javascript填充DOM。
如果你想要渲染的视图,你必须使用return View(model)
,你可以使用Razor来定义视图的模板。
答案 2 :(得分:0)
将return Json()
更改为return View()
。这将让MVC查找返回的视图模板。您检索到的Json可以作为模型传递(通过将其直接放到视图中:return View(json)
或将其放在ViewBag中。