Как вызвать представление в Url.Action - PullRequest
0 голосов
/ 29 января 2020

У меня есть метод GET, который возвращает json данные из веб-API. Я создал соответствующий вид, но он показывает данные 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 для вызова View

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

. Чего мне не хватает? Пожалуйста, помогите мне. Спасибо.

1 Ответ

0 голосов
/ 31 января 2020

Ваши действия MVC должны иметь возвращаемое значение ActionResult (или Task, если вы используете asyn c) в подписи. поэтому ваш метод должен быть определен как ...

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

Затем необходимо изменить операторы возврата с помощью метода действия, чтобы использовать предоставленные вспомогательные методы View Result, найденные в классе MVC Controller. Например:

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

Я изменил все ваши операторы возврата. Вам потребуется представление cs html с именем ListofLBFronendIPConfig.cs html, которое знает, как использовать объект json, связанный с его моделью. Надеюсь, это поможет.

...