简体   繁体   English

如何在 Url.Action 中调用视图

[英]How to call the view in Url.Action

I have a GET method that returns json data from the web api.我有一个从 web api 返回 json 数据的 GET 方法。 I have created a corresponding view, but its showing the json data instead of showing data on the view page.我创建了一个相应的视图,但它显示的是 json 数据,而不是在视图页面上显示数据。 My code is as below:我的代码如下:

[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;
    }

This is the way I have used Url.Action to call the View这是我使用 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>

what am I missing?我错过了什么? Please help me.请帮我。 Thank you.谢谢你。

Your MVC actions should have a return value of ActionResult (or Task if you are using async) in the signature.您的 MVC 操作应该在签名中具有 ActionResult(或 Task,如果您使用异步)的返回值。 so you menthod should be defined as ...所以你的menthod应该被定义为......

[HttpGet]
public ActionResult ListofLBFronendIPConfig(string resourceGroupName, string loadBalancerName)
{
    // . . . 
}

Then you need to change your return statements with the action method to use the provided View Result helper methods found on the MVC Controller class.然后,您需要使用 action 方法更改 return 语句,以使用在 MVC Controller 类中提供的 View Result 帮助器方法。 For Example:例如:

[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;
    }
}

I changed all of your return statements.我更改了您所有的退货声明。 You would need a cshtml view named ListofLBFronendIPConfig.cshtml that knows how to make use of the json object you bound to it's model.您需要一个名为 ListofLBFronendIPConfig.cshtml 的 cshtml 视图,它知道如何使用绑定到它的模型的 json 对象。 Hope this helps.希望这可以帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM