我将解释一般情况。为了解释我的问题,我要求一些耐心,直到我解释我是如何实现我的搜索页面。我有一个[Users]表和一个[Address]表,基于这个表我在SQL中派生了一个 VIEW - [vw_User_Addr] 。我正在使用L2S,因此我将获得一个强类型的vw_User_Addr类。
现在我有一个搜索页面,所以显然我会从这个类派生出来,如:
<%@ Page Title="User Search" ... Inherits="System.Web.Mvc.ViewPage<MyDAL.vw_User_Addr>" %>
My List操作返回一个List,我在View中使用它来形成Grid表。一切都很好,直到这里。现在我想在这个页面上实现搜索。所以这就是我发现的 -
在我的观点中我做了:
&lt;%MyDAL.vw_User_Addr usr = ((MyDAL.vw_User_Addr)(计算机[ “USR”])); %GT;
然后我使用这个“usr”对象绑定我的搜索控件,如:
&lt;%= Html.TextBox(“FirstName”, usr.FirstName)%&GT;
最后在我的HttpPost处理程序操作中,我对象vw_User_Addr:
[HttpPost]公共ActionResult 列表(vw_User_Addr searchObj){...}
我使用此searchObj提取用户可能在搜索控件中填充的值,然后执行搜索。
所以,我希望我解释得很好。这就是我在MVC2中搜索的方式。这是我的关注/问题:
当我点击搜索图片按钮时,我得到一个回发但它会触发一个给出错误的ModelValidation。除了至少那些是int(即像Roles下拉搜索控件)之外的所有内容都没有 - 如何处理?
经过大量研发后,我已经确定我要做一个ModelState.Clear();或者更复杂的方式来处理这个问题。还有更好的选择吗?
有没有更好的方法来实现上面解释的搜索实现?我是否使用标准\最佳方式在MVC中进行搜索?
在核心级别,我是否可以让L2S了解这是一个SQL-View,因此其Readonly和所有字段都可以为NULL - 因此 Mr.DefaultModelValidator 不会执行这种不合逻辑的验证?
如果4.是否可行,我可以将L2S视图中所有字段的属性设置为只读吗?
感谢您宝贵的时间和审查。如果我不在赛道上,请指导我。我相信这是最简单的搜索方案,所以它必须很容易。只需要找到缺失的链接。
答案 0 :(得分: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);
}
}