小编use*_*338的帖子

ASP.NET MVC不会调用global.asax的EndRequest

我试图在每个请求结束时执行一些操作.我更改了创建新项目时生成的Application_Start()以进行测试:

protected void Application_Start()
{
    EndRequest += (s, e) =>
    {
        Console.Write("fghfgh");
    };
    RegisterRoutes(RouteTable.Routes);
}
Run Code Online (Sandbox Code Playgroud)

lambda不会被调用.有什么想法吗?

编辑:我看到他们在SharpArch中做了类似的事情[ http://code.google.com/p/sharp-architecture/]并且它确实在那里工作......不,我不想使用HttpModule .

edit2:我发现的唯一解决方法是将Application_EndRequest与global.asax的私有静态成员结合使用:

private static WebSessionStorage wss;
protected void Application_Start()
{
    //...
    wss = new WebSessionStorage(this);
    //...
}

protected void Application_EndRequest(object sender, EventArgs e)
{
    wss.EndRequest(sender, e);
}
Run Code Online (Sandbox Code Playgroud)

wss必须是私有的,因为看起来像是使用不同的实例对象(this)调用Application_EndRequest.这也可能是我的事件(如开头所述)未被调用的原因.

asp.net-mvc global-asax

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

使用模型对象更新ModelState

问题:如何在发布+验证方案中更新ModelState.

我有一个简单的形式:

<%= Html.ValidationSummary() %>
<% using(Html.BeginForm())%>
<%{ %>
    <%=Html.TextBox("m.Value") %>
    <input type="submit" />
<%} %>
Run Code Online (Sandbox Code Playgroud)

当用户提交我想要验证输入时,在某些情况下我想为用户修复错误,让他知道他犯了一个已修复的错误:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(M m)
{
    if (m.Value != "a")
    {
        ModelState.AddModelError("m.Value", "should be \"a\"");
        m.Value = "a";
        return View(m);
    }
    return View("About");            
}
Run Code Online (Sandbox Code Playgroud)

问题是,MVC将简单地忽略传递给视图的模型,并将重新呈现用户键入的内容 - 而不是我的值("a").发生这种情况,因为TextBox渲染器检查是否存在ModelState,如果它不为null,则使用ModelState的值.该值当然是在发布之前键入的一个用户.

由于我无法更改TextBox渲染器的行为,因此我找到的唯一解决方案是自己更新ModelState.quick'n'dirty方法是(ab)使用DefaultModelBinder并覆盖通过简单地更改赋值方向将表单中的值分配给模型的方法;).使用DefaultModelBinder我不必解析id.以下代码(基于DefaultModelBinder的原始实现)是我的解决方案:

/// <summary>
    /// Updates ModelState using values from <paramref name="order"/>
    /// </summary>
    /// <param name="order">Source</param>
    /// <param name="prefix">Prefix used by Binder. Argument name in Action (if not explicitly specified).</param>
    protected void UpdateModelState(object model, string prefix) …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc

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

标签 统计

asp.net-mvc ×2

global-asax ×1