2011-06-06 50 views
1

我将解释一个通用场景。为了解释我的问题,我需要一些耐心,直到我解释我是如何实现我的搜索页面的。我有一个[用户]表和一个[地址]表,据此我推导出SQL中的VIEW - [vw_User_Addr]。我使用L2S,以便获得一个强类型的vw_User_Addr类。MVC通用搜索和模型验证问题

现在我已经搜索页面所以显然我会从这个类派生喜欢它:

<%@ Page Title="User Search" ... Inherits="System.Web.Mvc.ViewPage<MyDAL.vw_User_Addr>" %> 

我的列表操作返回,我在视图中使用,形成网格表列表。一切都很好,直到这里。现在我想在此页面上实现搜索。所以这就是我发现的 -

  • 在控制器列表动作期间,我创建ViewData [“Usr”] = new vw_User_Addr();
  • 以我查看我做的:

    <%MyDAL.vw_User_Addr USR = ((MyDAL.vw_User_Addr)(计算机[ “USR”])); %>

  • 然后我用这种 “USR” 对象绑定像我的搜索控制:

    <%= Html.TextBox( “姓”, usr.FirstName)%>

    在我HttpPost处理动作
  • 最后我反对vw_User_Addr这样的:

    [HttpPost]公众的ActionResult 列表(vw_User_Addr searchObj){...}

  • 我用这个searchObj提取用户可能会在搜索控件已填充值,然后我进行搜索。


所以,我希望我解释好。这是我在MVC2中进行搜索的方式。我这里还有我的顾虑/问题

  1. 当我点击搜索图像按钮,我得到一个回发,但它触发一个ModelValidation这给错误。不是所有的,但至少是那些int(即像角色下拉搜索控制) - 如何处理?

  2. 经过大量的R & D我已经解决了我要么做ModelState.Clear();或者更复杂的方式来处理这个问题。有更好的选择吗?

  3. 有没有更好的方法来实现上述的搜索实现?我是否使用标准\最佳方式在MVC中进行搜索?

  4. 在核心级,可我让L2S明白,这是SQL视图,其只读的,所有的字段可以为NULL - 这样的Mr.DefaultModelValidator不执行这样的不合逻辑的验证?

  5. 如果4.是可行的,我可以设置L2S视图中所有字段的属性是只读的吗?

谢谢您的宝贵时间和审查。如果我不在赛道上,请引导我。我相信这是最简单的搜索场景,所以它很容易。只需要找到缺少的链接。

回答

0

我实施了ActionFilterAttribute [SkipModelValidation],它可以避免/消除对搜索页面的不需要的模型验证。

编号:How to disable validation in a HttpPost action in ASP.NET MVC 3?

public class SkipModelValidationAttribute : ActionFilterAttribute 
    { 
     public override void OnActionExecuting(ActionExecutingContext filterContext) 
     { 
      //Get ModelState 
      ModelStateDictionary dict = ((Controller)filterContext.Controller).ModelState; 

      if (dict != null && !dict.IsValid) 
       dict.Clear(); 

      base.OnActionExecuting(filterContext); 
     } 
    }