我运行了一些搜索,但没有找到这个问题的可用答案.
好的,我的MVC 3架构是这样的:
- Project.EDM (contains only the entity framework edmx file and its .tt and .cs entity classes)
- Project.DAL (contains IXxxRepositiory and XxxRepository where CRUD is performed on the entity classes)
- Project.Web (the MVC3 project. Controllers transfer data from ViewModels into entity models and call the CRUD functions in the DAL repositories.)
Run Code Online (Sandbox Code Playgroud)
将WebApi在MVC4出现如此大的吸引力,因为我们将能够从其他应用程序调用的CRUD操作.我们都喜欢这个主意.
但是我发现的现有示例在MVC4项目中有CRUD操作ApiController.我习惯将这些操作放入一个单独的DAL项目中.推荐的选择是什么?我们还能有一个单独的DAL课吗?您如何设计专家的架构?
感谢您提供所有有用的建议.
我们知道在MVC中,a CheckBoxFor将生成一个checkbox带a value="true"和a hidden带a value=false.两个输入控件将共享相同的名称.
这是非常合理的,因为如果未选中该框,表单将能够POST一个假值.当复选框返回true时,模型绑定器将忽略隐藏的输入.
但是现在我已经覆盖了表单提交事件,以便将表单数据发送到JSON格式的WebAPI控制器.
序列化表单数据时,没有机制来正确解析复选框和隐藏之间的关系.因此,当取消选中时,它会返回一个false,这没关系.但是当检查时,它返回一个{true, false}而不是true,因为该serializeArray()函数遍历每个input并且发现两个值变为同一个名称.
问题是:纠正它的最佳方法是什么?
我有 Access 2010。但是每次我创建并打开新数据库时,标题栏都会显示 2007。当在其他人的 Access 2010 中打开相同的 accdb 文件时,它会显示(Access 2007-2010). 为什么会这样呢?
如何判断我的数据库是 2007 年还是 2010 年?
Stackflow中有一些类似的主题,但我发现它们都没有回答我的问题.
ASP.NET Web API 2就是我们现在使用的.我现在能够接受CORS来自我的WebAPI的身份验证请求.通过在Authorization标头(Bearer xxx)中发送的访问令牌,我能够访问受[Authorize]标签保护的资源.
问题是,如何在常规登录表单中实现类似于"记住我"复选框的功能?我们想要的是用户下次访问我们的网页时不需要再次登录.仅一个会话的访问令牌?WebAPI2如何设置令牌的到期时间?我们如何在会话中保存一些信息或使用本地存储来存储此类身份验证信息?当我们在客户端存储此令牌时,我们是否需要某种加密来保护它?
你在实施这个"记住我"功能时有什么建议?
要按EmployeeCardNumber(文本)降序创建索引。
因此,sql脚本应类似于:
ALTER TABLE dbo.Employees ADD CONSTRAINT
IX_Employees_EmplyeeCardNumber UNIQUE CLUSTERED
(
EmployeeCardNumber DESC
)
Run Code Online (Sandbox Code Playgroud)
在中IndexAttribute,有一个Order属性,它是一个整数???
这是我的流利的api:
var indexAttr = new IndexAttribute("IX_Employees_EmplyeeCardNumber")
{
IsClustered = true,
IsUnique = true,
Order = 1 // probably should be removed since we are using a composite key.
};
Property(c => c.EmployeeCardNumber)
.HasColumnAnnotation("Index", new IndexAnnotation(indexAttr))
.HasMaxLength(8)
.IsRequired();
Run Code Online (Sandbox Code Playgroud)
因此,问题是,如何在此代码优先方法中定义“ DESC”?
在 Fluent API 中,我们可以在字段上指定索引:
var indexAttr = new IndexAttribute("IX_EmployeeNumber")
{
IsClustered = true
};
Property(c => c.EmployeeNumber)
.HasColumnAnnotation("Index", new IndexAnnotation(indexAttr ))
.HasMaxLength(8)
.IsRequired();
Run Code Online (Sandbox Code Playgroud)
之后Add-Migration,我们会得到这样的CreateIndex语句:
CreateIndex("dbo.Employees", "EmployeeNumber", clustered: true, name: "IX_EmployeeNumber");
Run Code Online (Sandbox Code Playgroud)
在a之后Update-Database,我们有一个像这样的sql:
CREATE CLUSTERED INDEX [IX_EmployeeNumber] ON [dbo].[Employees]
(
[EmployeeNumber] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
Run Code Online (Sandbox Code Playgroud)
我的问题是:如何按降序创建这个索引?就像是:
CREATE CLUSTERED INDEX [IX_EmployeeNumber] ON [dbo].[Employees]
(
[EmployeeNumber] …Run Code Online (Sandbox Code Playgroud) 我注意到内置的浏览器验证<input type="email" />需要格式化xxx@xxx.只@需要角色.没有像点那样的点email@stackoverflow.com.
它与流行的jQuery.inputmask相同,email别名规则也不需要点.
我只是好奇.现在是忽略电子邮件验证中的点的标准方法吗?我没有在根级域名上看到任何电子邮件地址.忽略点的原因是什么?
今天我一直在努力使用这些Protractor代码:
element(by.linkText("People")).click();
browser.waitForAngular();
var url = browser.getCurrentUrl();
...
Run Code Online (Sandbox Code Playgroud)
getCurrentUrl在waitForAngular()声明之后放置似乎总是失败.
错误输出太模糊了:
UnknownError:javascript错误:在等待结果时卸载文档
那么,点击超链接并检查新网址的正确方法是什么?
这是我的测试:
如果我getCurrentUrl()点击链接之前,
it('can visit people page', function () {
var url = browser.getCurrentUrl();
element(by.linkText("People")).click();
expect(true).toBe(true);
});
Run Code Online (Sandbox Code Playgroud)
测试将通过.
如果我getCurrentUrl()点击链接后,
it('can visit people page', function () {
var url = browser.getCurrentUrl();
element(by.linkText("People")).click();
expect(true).toBe(true);
url = browser.getCurrentUrl();
});
Run Code Online (Sandbox Code Playgroud)
使用UnknownError上面的输出在Protractor中抛出错误.什么地方出了错?
我的视图模型中有一些属性在保存时是可选的,但在提交时是必需的.总之,我们允许部分保存,但提交整个表单,我们确实希望确保所有必填字段都有值.
我现在能想到的唯一方法是:
视图模型具有所有[Required]属性.如果请求是部分保存,则在进入控制器操作时ModelState.IsValid变为false.然后我运行所有ModelState(这是一个ICollection<KeyValuePair<string, ModelState>>)错误并删除[Required]属性引发的所有错误.
但是如果请求是提交整个表单,我不会干涉ModelState和[Required]属性生效.
这个更难看.一个视图模型将包含[Required]操作方法用于提交的所有属性.但是对于部分保存,我将表单数据发布到使用相同视图模型而没有所有[Required]属性的不同操作.
显然,我最终会遇到很多重复的代码/视图模型.
我一直在考虑是否可以[SubmitRequired]为这些必需的属性创建自定义数据注释属性.并且以某种方式使得验证在部分保存时忽略它,但在提交时则忽略.
仍然没有一个明确的线索.有人可以帮忙吗?谢谢.
刚刚使用Bot Framework创建了一个应用程序,该应用程序是从此处下载的模板创建的:http : //aka.ms/bf-bc-vstemplate。
它在测试仿真器中运行良好。但是当发布到IIS服务器时,出现此错误:
错误Web部署任务失败。((5/6/2016 3:03:54 PM)在远程计算机上处理请求时发生错误。
(5/6/2016 3:03:54 PM) An error occurred when the request was processed on the remote computer.
Exception has been thrown by the target of an invocation.
at System.RuntimeMethodHandle._SerializationInvoke(Object target, SignatureStruct& declaringTypeSig, SerializationInfo info, StreamingContext context)
at System.Runtime.Serialization.ObjectManager.CompleteISerializableObject(Object obj, SerializationInfo info, StreamingContext context)
at System.Runtime.Serialization.ObjectManager.FixupSpecialObject(ObjectHolder holder)
at System.Runtime.Serialization.ObjectManager.DoFixups()
at System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)
at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)
at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream …Run Code Online (Sandbox Code Playgroud) asp.net-mvc ×2
angularjs ×1
architecture ×1
asp.net ×1
botframework ×1
c# ×1
checkbox ×1
email ×1
entity-framework-migrations ×1
html5 ×1
iis ×1
javascript ×1
jquery ×1
json ×1
ms-access ×1
protractor ×1
selenium ×1