标签: viewresult

ASP.NET MVC控制器方法必须返回ActionResult吗?

作为ASP.NET MVC的新手,我一直想知道Controller方法的签名.在我看过的所有示例中,它们似乎总是返回ActionResult,即使它们实际返回ViewResult实例或类似实例.

这是一个常见的例子:

public ActionResult Index()
{
    return this.View();
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,将方法声明为public ViewResult Index()并获得更强的类型支持是不是更有意义?

实验表明这是有效的,所以似乎有可能.

我确实意识到可能存在需要多态的情况(例如,如果你只想在某些情况下重定向,但在其他情况下显示视图),但如果方法总是返回一个视图,我会发现更多的ViewResult可取的.

就未来的兼容性而言,ActionResult显然提供了更强大的签名,但如果有人控制整个代码库,则总是可以将方法的签名更改为更通用的返回类型(如果将来需要它).

是否有其他我不了解的注意事项,或者我应该继续并使用特定的返回类型声明我的控制器方法?

polymorphism asp.net-mvc actionresult viewresult

57
推荐指数
4
解决办法
3万
查看次数

MVC如何使Model在过滤器中使用ViewResult

我创建了一个MVC项目,我想从过滤器中将模型设置为View.

但我不知道,我怎么能这样做.

该模型:

public class TestModel
{
    public int ID { get; set; }
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

Contorller:

[CustomFilter(View = "../Test/Test")]//<===/Test/Test.cshtml
public ActionResult Test(TestModel testModel)//<===Model from Page
{
      //the Model has Value!!
       // if has some exception here
        return View(model);//<=====/Test/Test.cshtml
}
Run Code Online (Sandbox Code Playgroud)

过滤器(只是演示):

public override void OnActionExecuting(ActionExecutingContext filterContext){
     ViewResult vr = new System.Web.Mvc.ViewResult()
     {
            ViewName = this.View,//<======/Test/Test.cshtml
            ViewData = filterContext.Controller.ViewData                             
      };
      //How can I set Model here?!!
      vr.Model = ???? //<========the Model is only get
      filterContext.Result …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc model filter viewresult

19
推荐指数
4
解决办法
1万
查看次数

RedirectToAction()与View()和三元运算符?

在决定从Controller Action返回哪个ActionResult时,我决定使用三元运算符而不是更长的if-else.这是我的问题......

这段代码有效

return
    ModelState.IsValid ?
    (ActionResult) RedirectToAction("Edit", new { id = id }) :
    View(new EditViewModel(updatedCategory));
Run Code Online (Sandbox Code Playgroud)

但事实并非如此

return 
     ModelState.IsValid ?
     RedirectToAction("Edit", new { id = id }) :
     View(new EditViewModel(updatedCategory));
Run Code Online (Sandbox Code Playgroud)

如果使用if-else,我不必进行显式转换.另外,RedirectToAction()和View()都返回一个ActionResult衍生物.

我喜欢这段代码的简洁性,但是这个代码似乎并不合适.任何人都可以开导我吗?

虽然我确定这很明显,但EditViewModel是我的Edit动作的视图模型,updatedCategory是EF4对象.但我不认为这与这个问题有关.

好的...我刚刚意识到我在做什么是不必要的,因为无论我是回到使用updatedCategory的Edit操作,所以我不需要确保模型有效.如果有人能提供帮助,我仍然很想知道这个问题的答案.

asp.net-mvc actionresult viewresult

6
推荐指数
1
解决办法
1183
查看次数

MVC ViewResult.VIewName 即使设置后也为空

我正在尝试为 MVC 应用程序编写单元测试。我试图测试我的控制器是否返回正确的视图名称。

这是我测试的控制器操作:

public IActionResult Index(string reportcode)
{
    if(string.IsNullOrEmpty(reportcode))
          ReportCode = reportcode;

     ViewBag.GridSource = GetReportData(reportcode);
     return View("Index");
}
Run Code Online (Sandbox Code Playgroud)

这是我的单元测试:

[Test]
public void Index_ReturnCorrectView()
{
    var controller = new HomeController();
    var result = controller.Index("COMD") as ViewResult;
    Assert.AreEqual("Index", result.ViewName); 
}
Run Code Online (Sandbox Code Playgroud)

我从单元测试中得到的错误预期为“Index”,但为空。我做了很多搜索,大多数答案都说 ViewName 属性应该在返回视图时声明它之后设置。我尝试了同样的方法,但仍然无法正常工作。

谢谢

asp.net-mvc unit-testing viewresult

1
推荐指数
1
解决办法
1951
查看次数