2015-12-09 3 views
1

Я новичок в ASP.NET MVC, и я действительно смущен. У меня есть метод ActionResult контроллера, который присваивает значения различным элементам из моей модели viewmodel. Я много искал, но я просто не могу понять. Как заставить контроллер запускаться при загрузке представления, а затем взять значение из метода и использовать его в своем представлении? По моему мнению, у меня есть промежуток, и я хочу, чтобы значение StatusVM.StatusName из метода контроллера отображалось в метке в представлении.Контроллер MVC не запускается при просмотре нагрузки

Вот мое мнение:

@model Models.StatusViewModel 

@using (Html.BeginForm()) 
{  
    <span>@Html.LabelFor(m => m.StatusName)</span> 
} 

Вот мой контроллер:

public ActionResult Status() 
{ 
    var Statuses = _Methods.GetStatuses(); 

    var AccountInfo = _Methods.GetAccount(User.AccountID) ?? new TC.DomainModels.Models.AccountModel(); 

    var StatusVM = new StatusViewModel();    

    //fill out the VM, you can use Mappers, you can use switch, anything to get the values form the account and tracStatusList into the VM 

    var accountStatusInfo = Statuses.Where(s => s.StatusId == (int)AccountInfo.Status).FirstOrDefault(); 

    StatusVM.StatusName = String.IsNullOrEmpty(accountStatusInfo.StatusMask) ? accountStatusInfo.Status : accountStatusInfo.StatusMask; 

    var carrierTerm = _accountService.GetAccountCarrierTerms(User.AccountID); 
    if(carrierTerm.IsSMSNE) 
    { 
     StatusVM.ImagePath = accountStatusInfo.SmsneImage; 
    }     
    else 
    { 
     StatusVM.ImagePath = accountStatusInfo.StatusImage; 
    } 


    switch (AccountInfo.Status) 
    { 
     case TC.DomainModels.Models.Status.Certified : 
      StatusVM.ModalPath = ""; 
      break; 
    } 

    return PartialView("Navbar/nav_carrierstatus_new", StatusVM); 
} 

и вот мой ViewModel:

public class StatusViewModel 
{ 
    public string StatusName { get; set; } 
    public string ImagePath { get; set; } 
    public bool UseImage { get { return !String.IsNullOrEmpty(ImagePath); } } 
    public string ModalPath { get; set; } 

    public StatusViewModel() 
    { 

    } 
} 

Если кто-нибудь может сказать мне, что я делать неправильно, что было бы здорово. Заранее спасибо.

ОБНОВЛЕНО Сообщение об ошибке:

{"Execution of the child request failed. Please examine the InnerException for more information."} 

{"The controller for path '/' was not found or does not implement IController."} 

StackTrace: 

    at System.Web.Mvc.HttpHandlerUtil.ServerExecuteHttpHandlerWrapper.Wrap[TResult](Func`1 func) 
    at System.Web.Mvc.HttpHandlerUtil.ServerExecuteHttpHandlerAsyncWrapper.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) 
    at System.Web.HttpServerUtility.ExecuteInternal(IHttpHandler handler, TextWriter writer, Boolean preserveForm, Boolean setPreviousPage, VirtualPath path, VirtualPath filePath, String physPath, Exception error, String queryStringOverride) 
    at System.Web.HttpServerUtility.Execute(IHttpHandler handler, TextWriter writer, Boolean preserveForm, Boolean setPreviousPage) 
    at System.Web.HttpServerUtility.Execute(IHttpHandler handler, TextWriter writer, Boolean preserveForm) 
    at System.Web.HttpServerUtilityWrapper.Execute(IHttpHandler handler, TextWriter writer, Boolean preserveForm) 
    at System.Web.Mvc.Html.ChildActionExtensions.ActionHelper(HtmlHelper htmlHelper, String actionName, String controllerName, RouteValueDictionary routeValues, TextWriter textWriter) 
    at System.Web.Mvc.Html.ChildActionExtensions.Action(HtmlHelper htmlHelper, String actionName, String controllerName, RouteValueDictionary routeValues) 
    at System.Web.Mvc.Html.ChildActionExtensions.Action(HtmlHelper htmlHelper, String actionName, String controllerName) 
    at ASP._Page_Views_Shared_Navbar__navbar_cshtml.Execute() in c:\source code\TC Web UI Project\Branches\Branch Update TF Status Process\Views\Shared\Navbar\_navbar.cshtml:line 20 
    at System.Web.WebPages.WebPageBase.ExecutePageHierarchy() 
    at System.Web.Mvc.WebViewPage.ExecutePageHierarchy() 
    at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) 
    at System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) 
    at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer) 
    at System.Web.Mvc.HtmlHelper.RenderPartialInternal(String partialViewName, ViewDataDictionary viewData, Object model, TextWriter writer, ViewEngineCollection viewEngineCollection) 
    at System.Web.Mvc.Html.PartialExtensions.Partial(HtmlHelper htmlHelper, String partialViewName, Object model, ViewDataDictionary viewData) 
    at System.Web.Mvc.Html.PartialExtensions.Partial(HtmlHelper htmlHelper, String partialViewName) 
    at ASP._Page_Views_Shared_std_siteheader_partialview_cshtml.Execute() in c:\source code\TC Web UI Project\Branches\Branch Update TF Status Process\\Views\Shared\std_siteheader_partialview.cshtml:line 7 
    at System.Web.WebPages.WebPageBase.ExecutePageHierarchy() 
    at System.Web.Mvc.WebViewPage.ExecutePageHierarchy() 
    at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) 
    at System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) 
    at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer) 
    at System.Web.Mvc.HtmlHelper.RenderPartialInternal(String partialViewName, ViewDataDictionary viewData, Object model, TextWriter writer, ViewEngineCollection viewEngineCollection) 
    at System.Web.Mvc.Html.PartialExtensions.Partial(HtmlHelper htmlHelper, String partialViewName, Object model, ViewDataDictionary viewData) 
    at System.Web.Mvc.Html.PartialExtensions.Partial(HtmlHelper htmlHelper, String partialViewName) 
    at ASP._Page_Views_Shared__Layout_cshtml.Execute() in c:\source code\TC Web UI Project\Branches\Branch Update TF Status Process\Views\Shared\_Layout.cshtml:line 33 
    at System.Web.WebPages.WebPageBase.ExecutePageHierarchy() 
    at System.Web.Mvc.WebViewPage.ExecutePageHierarchy() 
    at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) 
    at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer) 
    at System.Web.WebPages.WebPageBase.<>c__DisplayClass3.<RenderPageCore>b__2(TextWriter writer) 
    at System.Web.WebPages.HelperResult.WriteTo(TextWriter writer) 
    at System.Web.WebPages.WebPageExecutingBase.WriteTo(TextWriter writer, HelperResult content) 
    at System.Web.WebPages.WebPageBase.Write(HelperResult result) 
    at System.Web.WebPages.WebPageBase.RenderSurrounding(String partialViewName, Action`1 body) 
    at System.Web.WebPages.WebPageBase.PopContext() 
    at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) 
    at System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) 
    at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer) 
    at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) 
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) 
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) 
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) 

View, которая вызывает частичный вид:

<nav class="navbar navbar-default"> 
    <div id="AccountInfoBar" class="container-fluid"> 
     <!-- Brand and toggle get grouped for better mobile display --> 
     <div class="navbar-header"> 
      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#top-nav"> 
       <span class="sr-only">Toggle navigation</span> 
       <span class="icon-bar"></span> 
       <span class="icon-bar"></span> 
       <span class="icon-bar"></span> 
      </button> 
      @Html.Partial("Navbar/nav_branding_icons") 
     </div> 

     <!-- Collect the nav links, forms, and other content for toggling --> 
     <div class="collapse navbar-collapse" id="top-nav"> 
      <ul class="nav navbar-nav"> 
       <li id="acctswitch_navsection">@Html.Partial("Navbar/nav_account_switching", new List<Tcetra.Models.AccountSwitchViewModelList>())</li> 
       <li id="account_navsection">@Html.Partial("Navbar/nav_account_info")</li>\ 
       <li id="carriersts_navsection">@Html.Action("Status", "Navbar")</li> 
      </ul> 

      <ul class="nav navbar-nav navbar-right"> 
       @Html.Partial("Navbar/nav_recent_transactions") 
       @Html.Partial("Navbar/nav_cart") 
       <li id="signout"><a href="@Url.Action("Logout", "Login", new { area = "" })" class="HeaderSignOutLink">Sign Out</a></li> 
      </ul> 
     </div><!-- /.navbar-collapse --> 
    </div><!-- /.container-fluid --> 
</nav> 
+1

Какой адрес URL, который вы используете для этого? – Patrick

+2

То, что вы описываете, не имеет никакого смысла. Представление * не будет «загружаться», если действие контроллера не ответит на него. Как вы видите представление без вызова действия контроллера? – David

+0

@Patrick загружается внутри другой страницы. Я получаю его от

  • @ Html.Partial ("Navbar/TStatus")
  • hollyquinn

    ответ

    2

    Я думаю, я знаю, что вы ищете. Из комментариев к этому вопросу:

    Патрик сказал:

    Какой URL вы используете для доступа к этому?

    hollyquinn ответил:

    @Patrick он загружает внутри другой страницы. Я получаю его от <li id="carriersts_navsection">@Html.Partial("Navbar/TStatus")</li>

    @Html.Partial метод делает частичной во время выполнения текущего действия контроллера. Он не вызывает действие другого контроллера - и я думаю, что это то место, где лежит ваше разъединение.

    Вместо этого, похоже, что вы хотите вызвать другое действие контроллера во время рендеринга вида для текущего действия контроллера:

    <li id="carriersts_navsection">@Html.Action("Status", "Navbar")</li> 
    

    Вы хотите @Html.Action (ChildActionExtensions.Action)

    Запускает указанный метод ребенка действий с использованием заданные параметры и имя контроллера и возвращает результат в виде строки HTML.

    +0

    Привет, Грег. Я пробовал то, что вы сказали, но я получаю сообщение об ошибке. Исключение типа «System.Web.HttpException» произошло в System.Web.dll, но не было обработано в коде пользователя Я попытался найти его, но я не уверен, как он относится к тому, что происходит в моем коде. – hollyquinn

    +1

    @hollyquinn: Можете ли вы опубликовать полное сообщение об ошибке, включая трассировку стека в своем вопросе? Что-то еще не так. –

    +0

    Я обновил свой вопрос с сообщениями об ошибках. – hollyquinn