标签: asp.net-mvc-2

MVC验证的单元测试

当我在MVC 2预览1中使用DataAnnotation验证时,如何在验证实体时测试我的控制器操作是否在ModelState中放置了正确的错误?

一些代码来说明.一,行动:

    [HttpPost]
    public ActionResult Index(BlogPost b)
    {
        if(ModelState.IsValid)
        {
            _blogService.Insert(b);
            return(View("Success", b));
        }
        return View(b);
    }
Run Code Online (Sandbox Code Playgroud)

这是一个失败的单元测试,我认为应该通过但不是(使用MbUnit和Moq):

[Test]
public void When_processing_invalid_post_HomeControllerModelState_should_have_at_least_one_error()
{
    // arrange
    var mockRepository = new Mock<IBlogPostSVC>();
    var homeController = new HomeController(mockRepository.Object);

    // act
    var p = new BlogPost { Title = "test" };            // date and content should be required
    homeController.Index(p);

    // assert
    Assert.IsTrue(!homeController.ModelState.IsValid);
}
Run Code Online (Sandbox Code Playgroud)

我想除了这个问题,应该我来测试验证,并应在我这种方式测试它?

validation tdd asp.net-mvc unit-testing asp.net-mvc-2

75
推荐指数
4
解决办法
2万
查看次数

有没有人为ASP.NET MVC实现RadioButtonListFor <T>?

Html.RadioButtonListASP.NET MVC Futures中有一个扩展方法.有没有人找到强类型版本的代码RadioButtonListFor<T>.它在视图中看起来像这样:

<%= Html.RadioButtonListFor(model=>model.Item,Model.ItemList) %>
Run Code Online (Sandbox Code Playgroud)

asp.net asp.net-mvc asp.net-mvc-2

75
推荐指数
2
解决办法
6万
查看次数

为什么同一个ASP.NET MVC操作的多个同时AJAX调用会导致浏览器阻塞?

几天前我问了这个问题:

为什么$ .getJSON()会阻止浏览器?

我在同一个控制器动作中同时发出六个jQuery async ajax请求.每个请求需要10秒才能返回.

通过调试和记录对action方法的请求,我注意到请求是序列化的,并且永远不会并行运行.即我在我的log4net日志中看到一个时间轴,如下所示:

2010-12-13 13:25:06,633 [11164] INFO   - Got:1156
2010-12-13 13:25:16,634 [11164] INFO   - Returning:1156
2010-12-13 13:25:16,770 [7124] INFO   - Got:1426
2010-12-13 13:25:26,772 [7124] INFO   - Returning:1426
2010-12-13 13:25:26,925 [11164] INFO   - Got:1912
2010-12-13 13:25:36,926 [11164] INFO   - Returning:1912
2010-12-13 13:25:37,096 [9812] INFO   - Got:1913
2010-12-13 13:25:47,098 [9812] INFO   - Returning:1913
2010-12-13 13:25:47,283 [7124] INFO   - Got:2002
2010-12-13 13:25:57,285 [7124] INFO   - Returning:2002
2010-12-13 13:25:57,424 [11164] INFO   - Got:1308
2010-12-13 13:26:07,425 [11164] INFO   - Returning:1308

查看FireFox中的网络时间线,我看到了: …

javascript ajax asp.net-mvc jquery asp.net-mvc-2

73
推荐指数
2
解决办法
4万
查看次数

ASP.NET MVC - 捕获所有路由和默认路由

在尝试让我的应用程序正确生成404错误时,我在路由表的末尾实现了catch all route,如下所示:

 routes.MapRoute(
            "NotFound", _
           "{*url}", _
           New With {.controller = "Error", .action = "PageNotFound"} _
       )
Run Code Online (Sandbox Code Playgroud)

但是,为了使这个工作,我不得不删除默认路由:

{controller}/action/{id}
Run Code Online (Sandbox Code Playgroud)

但是现在已经删除了默认设置,我的大部分操作链接都不再有效,而我找到让它们再次工作的唯一方法是为每个控制器/操作添加单独的路由.

是否有更简单的方法,而不是为每个控制器/操作添加路由?

是否可以创建一个默认路由,如果用户尝试导航到未知路由,仍然允许捕获所有路由?

asp.net-mvc asp.net-mvc-2

70
推荐指数
3
解决办法
6万
查看次数

"需要Id字段"创建的验证消息; 我未设置为[必需]

当我尝试使用Asp.Net MVC 2中的创建样式操作创建实体时,会发生这种情况.

POCO具有以下特性:

public int Id {get;set;}

[Required]
public string Message {get; set}
Run Code Online (Sandbox Code Playgroud)

在创建实体时,会自动设置Id,因此在Create操作中不需要它.

ModelState表示"需要Id字段",但我没有将其设置为如此.这里有自动发生的事吗?

编辑 - 原因显示

Brad Wilson通过Paul Speranza在下面的一条评论中回答了这个问题的原因,他说(欢呼保罗):

你提供了身份证的价值,你只是不知道你是谁.它位于默认路由的路由数据中("{controller}/{action}/{id}"),其默认值为空字符串,对int无效.使用action参数的[Bind]属性排除ID.我的默认路由是:new {controller ="Customer",action ="Edit",id =""} //参数默认值

编辑 - 更新模型技术

我实际上通过使用TryUpdateModel和与之相关的exclude参数数组改变了我再次这样做的方式.

    [HttpPost]
    public ActionResult Add(Venue collection)
    {
        Venue venue = new Venue();
        if (TryUpdateModel(venue, null, null, new[] { "Id" }))
        {
            _service.Add(venue);
            return RedirectToAction("Index", "Manage");
        }
        return View(collection);
    }
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc data-annotations asp.net-mvc-2

69
推荐指数
5
解决办法
5万
查看次数

JSONResult to String

我有一个JsonResult工作正常,并从一些POCO返回JSON.我想将JSON保存为DB中的字符串.

public JsonResult GetJSON()
{
    JsonResult json = new JsonResult
    {
        Data = GetSomPocos()
    }; 
    return json;
}
Run Code Online (Sandbox Code Playgroud)

我需要审核响应,所以我想将其保存json到数据库中.我找不到将JSON作为字符串的方法.

任何帮助表示赞赏.

c# serialization json asp.net-mvc-2

69
推荐指数
2
解决办法
10万
查看次数

如何连接几个MvcHtmlString实例

我对如何连接MvcHtmlString实例有一些疑问,因为在MSDN中找到了这些信息:

MvcHtmlString类表示不应再次编码的HTML编码字符串

使用这样的代码时,我冒险将字符串HTML编码两次:

var label = Html.LabelFor(model => model.Email);
var textbox = Html.TextBoxFor(model => model.Email);
var validation = Html.ValidationMessageFor(model => model.Email);

var result = MvcHtmlString.Create(
  label.ToString() + textbox.ToString() + validation.ToString());
Run Code Online (Sandbox Code Playgroud)

(注意:这应该进入HtmlHelper扩展方法以减少视图中的代码重复).

html-helper mvchtmlstring asp.net-mvc-2

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

在ASP.NET MVC中使用Tempdata - 最佳实践

我正在使用ASP.NET MVC 3来构建Web应用程序.

我想要做的是在两个控制器之间传递值,虽然有很多方法可以做到这一点我特别感兴趣的是使用TempData它.

public ActionResult Action1()
{
    string someMessage;
    Test obj = SomeOperation();
    if(obj.Valid)
    {
        someMessage = obj.UserName;
    }
    else
    {
        someMessage = obj.ModeratorName;
    }

    TempData["message"] = someMessage;

    return RedirectToAction("Index");
}

public ActionResult Index()
{
    ViewBag.Message = TempData["message"]

    return View();
}
Run Code Online (Sandbox Code Playgroud)

那么TempData这里的使用是否正确?我的意思是在最好的编程实践中使用这种正确的方法TempData吗?

在什么时候应该TempData使用案例?

注意:我已经通过以下链接

谢谢

asp.net-mvc tempdata asp.net-mvc-3 asp.net-mvc-2

66
推荐指数
3
解决办法
9万
查看次数

mvc:favicon.ico还能找一个控制器吗?

我收到一个错误:

"路径'/favicon.ico'的控制器未找到或未实现IController"

然后我想:框架如何知道它有哪些文件来实例化控制器,因为脚本,css和其他文件也是如此?

(从来没有想到这一点,但现在,favicon正在抱怨,我在想......)

但回到错误,为什么会发生这种情况?

asp.net asp.net-mvc asp.net-mvc-2

65
推荐指数
3
解决办法
2万
查看次数

当使用.net MVC RadioButtonFor()时,如何分组以便只能进行一次选择?

这个让我难过,我有一个强类型的视图,有这个循环生成radiobuttons:

<% foreach (QuestionAnswer qa in Model.QuestionAnswers)
   { %>
    <%= Html.RadioButtonFor(model => model.QuestionAnswers[(int)qa.QuestionID - 1].AnswerValue, "Checked" ) %>
    <%= Html.Encode(qa.OptionValue) %>
<% } %>
Run Code Online (Sandbox Code Playgroud)

它渲染得很好,但由于名称不一样,你可以选择1个以上的radiobutton.如何对它们进行分组,这样才能选择1个单选按钮?

任何帮助,将不胜感激!

c# asp.net asp.net-mvc-2

64
推荐指数
2
解决办法
14万
查看次数