通过调用它的方法返回从方法的观点

问题描述:

我有一个名为AspNetAssessment_QuestionController通过调用它的方法返回从方法的观点

public ActionResult Excel_Data(HttpPostedFileBase excelfile) 
{ 
    if (excelfile == null) 
    { 
     ViewBag.Error = "Please select an excel file"; 
     return View("Create"); 
    } 
    else if (excelfile.FileName.EndsWith("xls") || excelfile.FileName.EndsWith("xlsx")) 
    { 
     return View("Index"); 
    } 
    else 
    { 
     ViewBag.Error = "File type is incorrect"; 
     return View("Create"); 
    }   
} 

控制器的方法现在,当这个方法返回的视图中,请求的视图需要一些viewbag数据来运行其剃刀语法,就像在“创建”和“索引”都有:

@Html.DropDownList("ClassID", null, htmlAttributes: new { @class = "form-control" }) 

由于该系统只返回我的看法没有击中它不能从创建和索引的方法获取viewbag的值的方法。

我还添加了路由,以便他们打他们的方法routes.config文件

routes.MapRoute(
       name: "AspNetAssessment_Question/Create", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "AspNetAssessment_Question", action = "Create", id = UrlParameter.Optional } 
      ); 

,并同样适用于指数,但是当excel_data方法返回查看我收到一个错误Viewbag.propertyname数据丢失的以下网址

http://localhost:1331/AspNetAssessment_Question/Excel_Data 

我甚至试着拨打自己的方法,如创建(),而不是返回视图(“创建”),但它失败了,并没有渲染视图。

创建方法有两种形式。一个命中Excel_data和另一个调用创建方法的方法创建方法

我该如何击中他们的方法并从Excel_Data中返回视图,以便他们从Excel_Data中获取viewbag数据以及它们的方法和Excel_Data。

excel_data方法分配viewbag.Error和在创建的方法我有viewbag.ClassID和更多。

+1

你有没有考虑使用partialviews的? – Gino

解决你的问题很简单

给予解决方案之前,我们需要了解两件事情查看和redirecttoaction及其区别:

简而言之,返回view()就像asp.net中的server.Transfer(),而redirecttoaction会将302请求发送到浏览器。

详细信息可以在这个非常不错的文章中找到:http://www.dotnettricks.com/learn/mvc/return-view-vs-return-redirecttoaction-vs-return-redirect-vs-return-redirecttoroute

所以现在解决问题的方法是:

用于返回,而不是返回查看()redirectoaction()

您的示例略有修改:

public ActionResult Excel_Data(HttpPostedFileBase excelfile) 
     { 
      if (excelfile == null) 
      { 
       ViewBag.Error = "Please select an excel file"; 
       return View("Create"); 
      }else if (excelfile.FileName.EndsWith("xls") || excelfile.FileName.EndsWith("xlsx")) 
      { 
       return View("Index"); 
      } 
      else 
      { 


     TempData["Error"] = "File type is incorrect"; //replaced tempdata with viewbag 

       return RedirectToAction("Create","AspNetAssessment_QuestionController") 
      } 

     } 

注意:要保留的错误消息,请使用tempdata [“error”]而不是viewbag。上述代码中提到的错误

你也可以直接访问视图创建类似下面而不做任何的创建操作方法到TempData的数据。

创建视图代码例如:

@if(tempdata["error"]!= null) 
{ 
    var result = tempdata["error"]; 
} 

完蛋了

FYI:

,如果你想怎么样投之间的不同TempData的对象和区别的其他信息viewbag,可视数据,TempData的,请参考以下链接:http://www.binaryintellect.net/articles/36941654-8bd4-4535-9226-ddf47841892f.aspx

那篇文章有一个很好的解释

希望它是将有用

感谢 KARTHIK

+0

我批准使用tempdata'的'在会议/饼干,我在我的答案用的。干得好先生! –

+0

谢谢先生。快乐分享 –

如果只显示要显示的错误消息,则可以将它们保存到会话/ cookie,并使用RedirectToAction return RedirectToAction("Create", "AspNetAssessment_QuestionController");而不是return View("Create");

然后在创建/索引ActionResults,您可以添加这样的事情:

public ActionResult Create() 
{ 
    ViewBag.Error = Session["ErrorMessage"].ToString(); 
    return View(); 
}