为什么IDbContext实体框架中没有接口?如果现有的接口有类似SaveChanges()等的方法来测试,那么你可以从中导出自定义数据库上下文接口吗?
public interface ICustomDbContext : IDbContext
{
// add entity set properties to existing set of methods in IDbContext
IDbSet<SomeEntity> SomeEntities { get; }
}
Run Code Online (Sandbox Code Playgroud) 我有一个jQuery函数绑定到我的提交按钮,如下所示:
$(function () {
$('#signupform').submit(function () {
alert('test');
});
});
Run Code Online (Sandbox Code Playgroud)
但是,无论表单是否有效,它都会触发.我的模型摆放着很多DataAnnotations和客户端验证工作良好,但我只想说jQuery函数解雇如果表单已经过验证.我该如何做到这一点?
编辑:澄清一下,我正在使用MVC DataAnnotations + jQuery的不显眼的javascript来处理客户端验证.我没有写自己的javascript验证例程.内置的jQuery验证在验证表单方面做得很好,但我只需要知道如何在我自己的函数中将验证结果转换为布尔值.
所以我在MVC 3 RTM应用程序上编辑了我的csproj文件以设置以下属性:
<MvcBuildViews>true</MvcBuildViews>
Run Code Online (Sandbox Code Playgroud)
这应该导致我的视图在构建期间被编译,并在我的视图被破坏时强制构建错误.这是我做的唯一更改,但是,当我尝试构建应用程序时,出现以下错误:
在应用程序级别之外使用注册为allowDefinition ='MachineToApplication'的部分是错误的.此错误可能是由于未在IIS中将虚拟目录配置为应用程序引起的.
如果我改回false,项目将成功编译并运行
以下是csproj文件中配置的构建任务(这些任务从未手动编辑,它们是由Visual Studio 2010添加的)
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target> -->
<Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
<AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
</Target>
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么吗?如何正确配置MVC 3/Visual Studio 2010以在构建时验证我的视图?
在MVC 3中,是否可以确定某个操作是POST或GET方法的结果?我知道你可以使用[HttpPost]和[HttpGet]来装饰动作,以便在其中一个发生时触发特定动作.我想做的是关闭这些属性并以编程方式确定导致该操作的属性.
原因是,由于我的搜索页面的架构方式,我将搜索模型存储在TempData中.初始搜索会导致POST到搜索结果页面,但是分页链接都只是指向"/ results/2"的链接(第2页).他们检查TempData以查看模型是否在那里使用它,如果是这样的话.
当有人使用后退按钮转到搜索表单并重新提交时,这会导致问题.它仍在使用TempData中的模型,而不是使用新的搜索条件.所以,如果它是一个POST(即有人刚刚提交了搜索表单),我想首先清除TempData.
我如何编写一个比较两个字段的自定义ValidationAttribute?这是常见的"输入密码","确认密码"方案.我需要确保两个字段相同并保持一致,我想通过DataAnnotations实现验证.
所以在伪代码中,我正在寻找一种方法来实现如下所示:
public class SignUpModel
{
[Required]
[Display(Name = "Password")]
public string Password { get; set; }
[Required]
[Display(Name = "Re-type Password")]
[Compare(CompareField = Password, ErrorMessage = "Passwords do not match")]
public string PasswordConfirm { get; set; }
}
public class CompareAttribute : ValidationAttribute
{
public CompareAttribute(object propertyToCompare)
{
// ??
}
public override bool IsValid(object value)
{
// ??
}
}
Run Code Online (Sandbox Code Playgroud)
所以问题是,我如何编码[Compare] ValidationAttribute?
我想我错过了关于MVC表单如何工作的一些基础知识.我的主页上有一个搜索表单,其中有五六个不同的字段供用户搜索.所以我对我的结果动作进行了这个POST就好了.Result操作如下所示:
[HttpPost]
public ActionResult Results(SearchModel model)
{
ResultsModel results = new ResultsModel();
results.ResultList = SearchManager.Search(model).ToList();
return View("Results", results);
}
Run Code Online (Sandbox Code Playgroud)
我为这篇文章简化了上面的方法,但想法是一样的.所以一切正常.我的结果页面显示结果列表,我的用户位于以下URL:
所以...现在我想做一些相当普遍的事情.我在结果页面上有两个下拉列表."排序依据"和"每页结果数".我该怎么做并将全套模型数据发送回控制器,以便我可以查询新参数?实际上,SearchModel类有大约60个不同的字段.可能所有这些数据都可以包含在模型中.你如何坚持到"回帖"的页面?
同样的问题让我对如何进行分页感到有点困惑.我的分页链接将转到以下URL:
但是这假设我们正在响应GET请求(我不想在查询字符串中使用60个数据字段)并且模型数据在GET请求之间传递,我知道情况并非如此.
正如我所说的,我认为我缺少一些关于使用MVC 3,模型和表单帖子的基础知识.
任何人都可以帮助我指出正确的方向吗?我很乐意根据需要编辑/更新这篇文章以澄清事情.
编辑:我也想指出,我想避免将视图模型存储在Session变量中.这个站点最终将最终在Web场中进行负载平衡,并且我真的试图避免在可能的情况下使用Session.但是,如果它是唯一的选择,我将配置另一个会话状态提供程序,但我不想这样做.
我写了一个使用jQuery来显示模态弹出窗口的网站.它基本上覆盖了屏幕的整个可视区域和覆盖图,然后显示了一个DIV,其中包含覆盖层顶部的实际弹出窗口.该项目的要求之一与可访问性有关.
页面加载时,屏幕阅读器开始从页面顶部读取.当用户点击特定链接时,我们会显示模式对话框.我的问题是:如何中断屏幕阅读器对网站主要部分的阅读并告诉它开始阅读对话文本?
我的模态容器包含在这样的div中:
<div id="modalcontainer" tabindex="0" class="popup" role="dialog" aria-labelledby="dialog-label" >
Run Code Online (Sandbox Code Playgroud)
触发模态的jQuery看起来像这样:
$("#modalLink").click(function (e) {
e.preventDefault();
$("#modalcontainer").center();
$("#modalcontainer").show();
$("#closeBtnLink").focus();
$("#wrapper").attr('aria-disabled', 'true');
});
Run Code Online (Sandbox Code Playgroud)
"closeBtnLink"是模态对话框中的关闭按钮.我本以为把重点放在这上会指示屏幕阅读器开始从那个元素中读取.
"wrapper"元素是模态对话框的SIBLING.根据另一个SO用户的建议,出于不同的原因,我在包含整个页面的包装元素上设置了"aria-disabled = true".模态对话框作为此容器外部的兄弟存在.
我的主要目标是让屏幕阅读器在点击特定链接时阅读我的模态DIV元素的内容.任何帮助,将不胜感激.
为了验证的目的,我如何将MVC 3表单上的多个文本框视为一个文本框?
这是一个简单的电话号码字段,其中一个区域代码文本框,一个用于前缀,一个用于最后四个数字.
实际上有两个验证要求:
1)他们都是必需的.2)它们都必须包含整数.
现在,对于单个字段执行此操作很简单,但是如何使用MVC创建ASP.NET CustomValidator的等效项,以便我可以将所有三个字段作为一个整体进行验证?
我正在IIS 7.5下运行ASP.NET 4.0应用程序.一天几次,我们的应用程序池意外回收.发生这种情况时,我们的系统日志显示以下事件:
为应用程序池"X"提供服务的进程与Windows进程激活服务发生致命的通信错误.进程ID为'5768'.数据字段包含错误编号.
要么
为应用程序池"X"提供服务的进程无法响应ping.进程ID为"1032".
几乎总是,在应用程序日志中的完全相同的时间有一个相应的事件,如下所示:
Faulting application name: w3wp.exe, version: 7.5.7600.16385, time stamp: 0x4a5bcd2b
Faulting module name: clr.dll, version: 4.0.30319.269, time stamp: 0x4ee9ae83
Exception code: 0xc00000fd
Fault offset: 0x00001916
Faulting process id: 0x508
Faulting application start time: 0x01cd4d8958ecf9ad
Faulting application path: C:\Windows\SysWOW64\inetsrv\w3wp.exe
Faulting module path: C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
Report Id: 8dcc413b-b98a-11e1-8075-001c23d6d910
Run Code Online (Sandbox Code Playgroud)
因此,我安装了IIS调试工具并设置了崩溃规则,指定了"特定的IIS Web应用程序池",没有记录第一次机会异常,也没有"高级设置"(例外,断点,事件)下的任何内容.
我也(同时)使用以下命令行从Windows调试工具运行ADPlus:
adplus -crash -pn w3wp.exe -NoDumpOnFirst -o c:\logs
Run Code Online (Sandbox Code Playgroud)
但是,由于我已经附加了调试器,我在系统日志中收到了几条"警告"级别的消息(关于"进程服务应用程序池'X'遭遇了致命的通信错误......"),但是我我不再在应用程序日志中获得相应的错误级别事件.
我唯一能得到的是以下(其中约有50个):
[6/18/2012 7:50:25 PM] Thread exited. Exiting thread system id - System ID: 3300. Exit code …Run Code Online (Sandbox Code Playgroud) 所以,我有一个名为CompressAttribute的自定义属性,它在global.asax中设置为全局过滤器.它使用反射来检查当前操作方法的返回类型,如果它是"ViewResult",它使用GZip或Deflate压缩输出.它工作得很好,除非页面抛出500服务器错误.如果遇到错误,而不是显示.NET错误页面,我得到一堆:
`我%/米{JJT
显然它正在尝试编码导致问题的500 Server Error页面.处理这个问题的最佳方法是什么?
这是过滤器代码:
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
MethodInfo actionMethodInfo = Common.GetActionMethodInfo(filterContext);
if (GetReturnType(actionMethodInfo).ToLower() != "viewresult") return;
HttpRequestBase request = filterContext.HttpContext.Request;
string acceptEncoding = request.Headers["Accept-Encoding"];
if (string.IsNullOrEmpty(acceptEncoding)) return;
acceptEncoding = acceptEncoding.ToUpperInvariant();
HttpResponseBase response = filterContext.HttpContext.Response;
if (acceptEncoding.Contains("GZIP"))
{
response.AppendHeader("Content-encoding", "gzip");
response.Filter = new WebCompressionStream(response.Filter, CompressionType.GZip);
}
else if (acceptEncoding.Contains("DEFLATE"))
{
response.AppendHeader("Content-encoding", "deflate");
response.Filter = new WebCompressionStream(response.Filter, CompressionType.Deflate);
}
}
Run Code Online (Sandbox Code Playgroud) asp.net-mvc ×6
c# ×6
forms ×2
javascript ×2
jquery ×2
validation ×2
asp.net ×1
boolean ×1
debugging ×1
html ×1
http ×1
iis-7 ×1
mocking ×1
moq ×1
msbuild ×1
testing ×1
unit-testing ×1
viewmodel ×1
windbg ×1