我已经按照这个答案来模拟 HttpContext、Request、Response 和 User 并设置Controller.ControllerContextand Controller.Url。
Controller.Url在调用之前绝对不为空controller.Index()。然而,在内部controller.Index(),它是空的。看起来很奇怪。我缺少什么?
这是我的测试装置:
[TestFixture]
public class ControllerFixtureBase
{
private Mock<HttpContextBase> _httpContextMock;
private RouteCollection _routes;
[SetUp]
public void SetUp()
{
var requestMock = new Mock<HttpRequestBase>();
requestMock.SetupGet(x => x.ApplicationPath)
.Returns("/");
requestMock.SetupGet(x => x.Url)
.Returns(new Uri("http://localhost/a", UriKind.Absolute));
requestMock.SetupGet(x => x.ServerVariables)
.Returns(new NameValueCollection());
var responseMock = new Mock<HttpResponseBase>();
responseMock.Setup(x => x.ApplyAppPathModifier(It.IsAny<string>()))
.Returns((string url) => url);
var principalMock = new Mock<IPrincipal>();
principalMock.SetupGet(p => p.Identity)
.Returns(new GenericIdentity("testuser"));
principalMock.Setup(p => p.IsInRole(ApplicationRoles.DataAdmin))
.Returns(false); …Run Code Online (Sandbox Code Playgroud) 我公司有很多Visual Studio Team Services帐户.我们有一个用于内部开发,一个用于我们的每个客户.我们在内部开发帐户(https://{dev-account}.visualstudio.com/DefaultCollection)中托管我们的内部nuget库,并且我想在客户端帐户(https://{client-account}.visualstudio.com/DefaultCollection)中运行构建时恢复包.
我使用bootstrap工具设置了存储库,在我的VSTS构建中,我添加了一个Batch Script构建步骤来执行init.cmd.这很好,但是,下一步是NuGet Package Restore,它在dev帐户的NuGet提要中找不到包:
2016-03-22T23:34:37.5398840Z请提供以下网址的凭据:https:// {dev-account} .pkgs.visualstudio.com/DefaultCollection/_packaging/{my-feed} /nuget/v3/index.json
2016-03-22T23:34:37.5408842Z用户名:密码:警告:无法找到包'{my-package}'的版本'1.9.0.10'.
这是有道理的,因为Feed位于单独的VSTS帐户中,并且构建代理无权访问该Feed.
有没有办法解决?我知道MyGet,它提供免费的公共供稿,但如果可能的话,我想使用VSTS.
它们都具有相同的名称并使用新的Graph API,但哪个更适合ASP.NET 4.0 WebForms?官方SDK在几个月内没有更新,但Codeplex上的SDK刚刚在上周更新.有没有人有经验可以提供意见?
我正在使用基于ASP/ADO.NET的应用程序和数据结构,我正在将其中的一部分转换为ASP.NET MVC.在数据结构中,存在"可选的一对一"关系,其中两个表使用相同的主键和名称.基本上,这个表可以被认为是主表的"可选扩展".以下是该型号的样品:
public class ZoneMedia
{
public int ZoneMediaID { get; set; }
public string MediaName { get; set; }
public int Width { get; set; }
public int Height { get; set; }
public virtual ZoneMediaText MediaText { get; set; }
}
public class ZoneMediaText
{
public int ZoneMediaID { get; set; }
public string Text { get; set; }
public int Color { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
显然,EF 4.1代码首先会自动映射这个问题.所以我意识到我必须明确指定映射.我试过这个:
modelBuilder.Entity<ZoneMedia>()
.HasOptional(zm => zm.ZoneMediaText);
modelBuilder.Entity<ZoneMediaText>()
.HasRequired(zmt => zmt.ZoneMedia)
.WithRequiredDependent(zm …Run Code Online (Sandbox Code Playgroud) 从数据库中删除记录时,偶尔会遇到引用约束异常.
以下是例外细节.当异常与外键约束错误特别相关时,是否可以向用户显示消息?
我可以查看异常错误字符串并测试是否存在单词,但我不确定是否有更好的方法来检查特定的SQL错误.
谢谢凯文
Message: The DELETE statement conflicted with the REFERENCE constraint "FK_Customers_PaymentTerms". The conflict occurred in database "kd", table "dbo.Customers", column 'CstPtmID'.
The statement has been terminated.
Source: .Net SqlClient Data Provider
TargetSite: Void OnError(System.Data.SqlClient.SqlException, Boolean)
StackTrace: at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior …Run Code Online (Sandbox Code Playgroud) 在保存数据库中的各个字段之前,我需要进行一些修剪.我们将xml从另一个应用程序反序列化为EF实体,然后插入它们.xml中有少量字段超过4000个字符,而不是使用TEXT数据类型,我们希望修改它们.
我的想法是检查MetadataWorkspace和DbChangeTracker内部MyDbContext.SaveChanges()找到任何nvarchar(4000)实体属性并修剪任何超过4000的字符串值.但我不知道如何处理这个.我找不到任何相关文件.我看到了一些相关的问题,但没有任何细节或提供任何代码示例.
这是我到目前为止所得到的:
public override int SaveChanges()
{
//TODO: trim strings longer than 4000 where type is nvarchar(max)
MetadataWorkspace metadataWorkspace =
((IObjectContextAdapter) this).ObjectContext.MetadataWorkspace;
ReadOnlyCollection<EdmType> edmTypes =
metadataWorkspace.GetItems<EdmType>(DataSpace.OSpace);
return base.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
解
这是基于@ GertArnold答案的解决方案.
// get varchar(max) properties
var entityTypes = metadataWorkspace.GetItems<EntityType>(DataSpace.CSpace);
var properties = entityTypes.SelectMany(type => type.Properties)
.Where(property => property.TypeUsage.EdmType.Name == "String"
&& property.TypeUsage.Facets["MaxLength"].Value.ToString() == "Max"
// special case for XML columns
&& property.Name != "Xml")
.Select(
property =>
Type.GetType(property.DeclaringType.FullName) …Run Code Online (Sandbox Code Playgroud) 我有一个验证器 Webform.aspx
<asp:RequiredFieldValidator ID="val1" ClientIDMode="Static" runat="server"/>
Run Code Online (Sandbox Code Playgroud)
在我的jquery中,我有一个函数试图通过标记中的按钮调用它来禁用它
btnclick = function()
{
var a = $('#val1');
alert(a); //alerts [object Object]
ValidatorEnable(a, false); //gets a console error
}
Run Code Online (Sandbox Code Playgroud)
当执行此功能时,我在控制台中收到错误(我正在使用谷歌浏览器),这样说 uncaught TypeError: Cannot set property 'visibility' of undefined
这是说我的var a未定义?......但这没有任何意义,因为它提醒了一个人[object Object]
我也做了alert(a.length)这给了我1预期的.
我有一个有两个模型的网络项目 - IndicatorModel和GranteeModel.我也有相应的ApiControllers - IndicatorsController,和GranteesController.我打算将这个设置用于我的实际web项目的数据API,所以我在我的项目中创建了一个名为"Api"的新区域.在我的ApiAreaRegistration班上,我正在为这些控制器注册路由,如下所示:
context.Routes.MapHttpRoute(
name: "ApiDefault",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
基本上,http://myapp/api/indicators/123应该转到Indicators控制器的请求,它应该特别由接受整数参数的action方法处理.我的控制器类设置如下,它完美地工作:
public class IndicatorsController : ApiController
{
// get: /api/indicators/{id}
public IndicatorModel Get(int id)
{
Indicator indicator = ...// find indicator by id
if (indicator == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
return new IndicatorModel(indicator);
}
}
Run Code Online (Sandbox Code Playgroud)
我的GranteesController课程设置相同:
public class GranteesController : ApiController
{
// get: /api/grantees/{id}
public GranteeModel Get(int …Run Code Online (Sandbox Code Playgroud) 我想做这样的事情:
视图
<td class="status_@Model.IsActive">
@Model.Description
</td>
Run Code Online (Sandbox Code Playgroud)
CSS
<style type="text/css">
.status_True
{
background-color: Red;
}
.status_False
{
background-color: Green;
}
</style>
Run Code Online (Sandbox Code Playgroud)
@Model.IsActive是回归True还是False.当然这段代码不起作用.
类的Html输出是: class="status_@Model.IsActive"
我的预期输出是: class="status_True"
这可能是做这样的逻辑吗?如果可能,我该怎么办?还是另一种改变css类的方法?可能有不同的方式.
谢谢.
我有两个词典dict1和dict2,我想从dict2中删除dict2中使用其键的项目.而不是循环通过dict2并使用"ContainsKey"方法,我还有其他方法,比如使用linq.
asp.net ×3
c# ×3
asp.net-mvc ×1
azure-devops ×1
css ×1
facebook ×1
javascript ×1
jquery ×1
linq ×1
moq ×1
nuget ×1
nunit ×1
razor ×1
sql-server ×1
tfsbuild ×1
validation ×1