根据MSDN,ActionResult用于返回多种类型的结果,具体取决于方法 You decide which type of action result to return based on the task that the action method is performing.
我刚刚开始了一项新工作,他们的MVC网站非常复杂和错综复杂,以至于在不破坏已经工作的情况下,某些变化真的很难实现。
我的问题是:使用Ajax.BeginForm,是否可以根据参数值从同一个操作方法返回JSON或部分视图?
这是一个简单的例子
@using (Ajax.BeginForm("AddNetworkLocationContact", "NetworkLocations", new AjaxOptions() {UpdateTargetId = "networkLocationList", OnSuccess = "onContactAddSuccess"}))
它命中控制器(此时)可以访问名为PartialBeingCalledFrom
的viewmodel属性。
取决于它的调用位置(Guide或EmergencyContactsTable)我希望它呈现JSON响应或部分视图响应。这条线不起作用。
if(viewModel.PartialBeingCalledFrom == CallerLocation.Guide)
return PartialView("_NetworkLocationList", GetNetworkLocationsViewModel(viewModel.ClientId, "New Emergency Contact has been added"));
此行
return Json(new
{
status = true,
updatedData = new
{
name = returnName,
number = returnListOfNumbers,
availability = viewModel.ExistingContactAvailablity,
contactId = viewModel.ExistingContactId,
docId = (string)network._id,
updatedContactsArray = (object)JsonConvert.SerializeObject(contactServices.GetContactPhoneNumberDictionary(ClientId.Value), Formatting.None)
}
我假设的问题是我在OnSuccess
中声明了一个Ajax.BeginForm
方法,当我返回JSON数据时,该方法会正确运行。我假设jquery无法判断收到的内容是JSON还是视图,因此不知道何时执行上述ajax调用中提供的UpdateTargetId
部分视图。有没有一种很好的方法来实现这种功能?
在我发布此内容之前没有出现在任何搜索中的Dupe!
ASP.NET MVC controller actions that return JSON or partial html
答案 0 :(得分:-1)
您可以检查响应的内容类型以查看它是否为JSON。只要您的响应正确完成,就应该始终为JSON结果设置。
// make your onsuccess method take all 3 parameters that get passed back.
function myOnSuccess (result, status, xhr ){
// get contentType. set to empty string if null
var contentType = xhr.getResponseHeader( 'content-type' ) || '';
if (contentType.indexOf( 'json' ) > -1){
// parse your json result and do json stuff.
} else{
// this is likely a partial view/html; do html stuff.
}
}