[英]How to call the view in Url.Action
我有一个从 web api 返回 json 数据的 GET 方法。 我创建了一个相应的视图,但它显示的是 json 数据,而不是在视图页面上显示数据。 我的代码如下:
[HttpGet]
public List<Project.Entity.ViewModels.PassCatalog.LBFrontendIPConfig> ListofLBFronendIPConfig(string resourceGroupName, string loadBalancerName)
{
try
{
var token = HttpContext.Session.GetString("Token");
var tenantid = HttpContext.Session.GetString("TenantId");
var sessionId = HttpContext.Session.GetString("SessionId");
if (!string.IsNullOrEmpty(token) || !string.IsNullOrEmpty(tenantid))
{
var path = $"/api/PaasCatalog/GetLBFrontendIPConfigList?resourceGroupName=" + resourceGroupName + "&loadBalancerName=" + loadBalancerName;
var response = _httpClient.SendRequestWithBearerTokenAsync(HttpMethod.Get, path, null, token, tenantid, _cancellationToken, sessionId).Result;
if (!response.IsSuccessStatusCode)
return null;
var result = response.Content.ReadAsStringAsync().Result;
if (result == null)
return null;
var jsontemplates = JsonConvert.DeserializeObject<List<Project.Entity.ViewModels.PassCatalog.LBFrontendIPConfig>>(result);
return jsontemplates;
}
else
{
RedirectToAction("SignOut", "Session");
}
}
catch (Exception ex)
{
_errorLogger.LogMessage(LogLevelInfo.Error, ex);
return null;
}
return null;
}
这是我使用 Url.Action 调用视图的方式
<i onclick="location.href='@Url.Action("ListofLBFronendIPConfig", "PaasCatalog", new {LoadBalancerName = item.Name, resourceGroupName = item.RGName})'" class="fa fa-expand @Model.ActionClass.Edit" style="color:green;font-size: 18px;" data-toggle="tooltip" data-placement="bottom" title="Scale Up/Down" data-original-title="Tooltip on bottom"></i>
我错过了什么? 请帮我。 谢谢你。
您的 MVC 操作应该在签名中具有 ActionResult(或 Task,如果您使用异步)的返回值。 所以你的menthod应该被定义为......
[HttpGet]
public ActionResult ListofLBFronendIPConfig(string resourceGroupName, string loadBalancerName)
{
// . . .
}
然后,您需要使用 action 方法更改 return 语句,以使用在 MVC Controller 类中提供的 View Result 帮助器方法。 例如:
[HttpGet]
public ActionResult ListofLBFronendIPConfig( string resourceGroupName, string loadBalancerName )
{
try
{
var token = HttpContext.Session.GetString( "Token" );
var tenantid = HttpContext.Session.GetString( "TenantId" );
var sessionId = HttpContext.Session.GetString( "SessionId" );
if ( !string.IsNullOrEmpty( token ) || !string.IsNullOrEmpty( tenantid ) )
{
var path = $"/api/PaasCatalog/GetLBFrontendIPConfigList?resourceGroupName=" + resourceGroupName + "&loadBalancerName=" + loadBalancerName;
var response = _httpClient.SendRequestWithBearerTokenAsync( HttpMethod.Get, path, null, token, tenantid, _cancellationToken, sessionId ).Result;
if ( !response.IsSuccessStatusCode )
return new HttpStatusCodeResult(response.StatusCode); //return a status code result that is not 200. I'm guessing on the property name for status code.
var result = response.Content.ReadAsStringAsync().Result;
if ( result == null )
return View(); // this one could be lots of things... you could return a 404 (return new HttpNotFoundResult("what wasn't found")) or you could return a staus code for a Bad Request (400), or you could throw and exception. I chose to return the view with no model object bound to it.
var jsontemplates = JsonConvert.DeserializeObject<List<Project.Entity.ViewModels.PassCatalog.LBFrontendIPConfig>>( result );
return View(jsontemplates);
}
else
{
// retrun the redirect result...don't just call it
return RedirectToAction( "SignOut", "Session" );
}
}
catch ( Exception ex )
{
_errorLogger.LogMessage( LogLevelInfo.Error, ex );
// rethrow the exception (or throw something else, or return a status code of 500)
throw;
}
}
我更改了您所有的退货声明。 您需要一个名为 ListofLBFronendIPConfig.cshtml 的 cshtml 视图,它知道如何使用绑定到它的模型的 json 对象。 希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.