我在C#中的asp.net mvc 2应用程序中遇到UTF8编码问题.我正在尝试让用户从字符串下载一个简单的文本文件.我试图用以下行获取字节数组:
var x = Encoding.UTF8.GetBytes(csvString);
但当我使用以下命令返回下载时:
return File(x, ..., ...);
我得到一个没有BOM的文件,所以我没有正确显示克罗地亚字符.这是因为我的bytes数组在编码后不包含BOM.我手动插入这些字节然后它正确显示,但这不是最好的方法.
我还尝试创建UTF8Encoding类实例并将布尔值(true)传递给其构造函数以包含BOM,但它也不起作用.
有人有解决方案吗?谢谢!
从现在开始,我使用了优秀的FluentValidation 库来验证我的模型类.在Web应用程序中,我将它与jquery.validate插件结合使用,以执行客户端验证.一个缺点是许多验证逻辑在客户端重复,不再集中在一个地方.
出于这个原因,我正在寻找替代方案.有许多例子出有表示数据注解的使用来执行模型验证.看起来很有希望.我无法找到的一件事是如何验证依赖于另一个属性值的属性.
我们以下面的模型为例:
public class Event
{
[Required]
public DateTime? StartDate { get; set; }
[Required]
public DateTime? EndDate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想确保EndDate大于StartDate.我可以编写一个扩展ValidationAttribute的自定义验证属性,以便执行自定义验证逻辑.不幸的是我找不到获取模型实例的方法:
public class CustomValidationAttribute : ValidationAttribute
{
public override bool IsValid(object value)
{
// value represents the property value on which this attribute is applied
// but how to obtain the object instance to which this property belongs?
return true;
}
} …Run Code Online (Sandbox Code Playgroud) 这些东西是一样的吗?
[HttpPost/HttpGet] vs. [AcceptVerbs(HttpVerbs.Post/Get)]
Run Code Online (Sandbox Code Playgroud)
如果没有区别的话?
我听说有些人说枚举是邪恶的,不应该在Web服务中使用,因为如果分配了一些值,或者枚举标记了Flags属性,服务器和客户端之间可能会出现不匹配.他们还说,暴露枚举的网络服务难以维护,但实际上并没有给我可行的论据.那么根据您的经验,在WCF Web服务中使用枚举的优缺点是什么?
$query = mysql_query("UPDATE a SET fruit = '**apple**' WHERE id = '**1**' ");
$query2 = mysql_query("UPDATE a SET fruit = '**orange**' WHERE id = '**2**' ");
$query3 = mysql_query("UPDATE a SET fruit = '**peach**' WHERE id = '**3**' ");
Run Code Online (Sandbox Code Playgroud)
有没有办法将其简化为一个查询?
我想在我的网站的所有页面中包含一个下拉列表.我假设一个好的地方把这个逻辑放在布局页面(_layout.cshtml)中.如果用户更改年份,我想更改我的年会(ModelBinder)也要更改.这对于ASP.NET Web表单来说非常容易,但在MVC中几乎不可能做到.我尝试了一个没有运气的局部视图.有人有什么想法吗?
我想知道在构造函数中使用或不使用"hashset"创建类之间的区别.
使用代码第一种方法(4.3),可以创建这样的模型:
public class Blog
{
public int Id { get; set; }
public string Title { get; set; }
public string BloggerName { get; set;}
public virtual ICollection<Post> Posts { get; set; }
}
public class Post
{
public int Id { get; set; }
public string Title { get; set; }
public DateTime DateCreated { get; set; }
public string Content { get; set; }
public int BlogId { get; set; }
public ICollection<Comment> Comments { get; set; …Run Code Online (Sandbox Code Playgroud) 我在4台Windows 2003计算机的服务器场中部署了几个ASP.NET应用程序.每个应用程序在IIS中使用单独的应用程序池和虚拟目录.他们严重依赖其持久会话进程外的单个的SQL Server 2000(上<sessionstate mode="sqlserver" ... />).应用程序是针对.NET 3.0编译的,但.NET 3.5 SP1安装在服务器上.
每个Web服务器每秒接收大约10个请求.每隔一段时间我就会在日志中遇到一些异常:
System.Data.SqlClient.SqlException: A transport-level error has occurred when receiving results from the server. (provider: TCP Provider, error: 0 - The semaphore timeout period has expired.)
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(TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, UInt32 error)
at System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket()
at System.Data.SqlClient.TdsParserStateObject.ReadBuffer()
at System.Data.SqlClient.TdsParserStateObject.ReadByte()
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at …Run Code Online (Sandbox Code Playgroud) 我有一个ASP.NET MVC 3(Razor)Web应用程序,其特定页面是高度数据库密集型的,并且用户体验是最重要的.
因此,我在这个特定的页面上引入了缓存.
我试图找到一种方法来实现这种缓存模式,同时保持我的控制器很薄,就像它目前没有缓存:
public PartialViewResult GetLocationStuff(SearchPreferences searchPreferences)
{
var results = _locationService.FindStuffByCriteria(searchPreferences);
return PartialView("SearchResults", results);
}
Run Code Online (Sandbox Code Playgroud)
如您所见,控制器非常薄,应该如此.它不关心如何/从哪里获取它的信息 - 这是服务的工作.
关于控制流程的几点注意事项:
IQueryable<T> 存储库并将结果具体化为T或ICollection<T>.我想如何实现缓存:
[HttpPost],根据HTTP标准,不应将其作为请求缓存.其次,我不想纯粹基于HTTP请求参数进行缓存 - 缓存逻辑比这复杂得多 - 实际上有两级缓存正在进行.Cache["somekey"] = someObj;.首先想到的是告诉我创建另一个服务(继承LocationService),并在那里提供缓存工作流(首先检查缓存,如果没有调用db,则添加到缓存,返回结果).
这有两个问题:
System.Web这里添加一个引用.我还想过Models在Web应用程序中使用该文件夹(我目前仅用于ViewModels),但在模型文件夹中使用缓存服务听起来不对.
那么 …
在我当前的项目中,我有很多复杂的HTML报告,我们在那里使用rowpans和colspans对TR和TD进行大量的条件渲染.
它有时看起来像这样(这是非常简化的):
<tr>
@foreach (var ourItem in ourList) {
if (ourItem != ourList.First()) {
<tr>
}
<td></td>
</tr>
}
Run Code Online (Sandbox Code Playgroud)
然而,Razor声称:"foreach循环缺少关闭"}"字符".(在Visual Studio中)
我一直在努力,包裹<tr>在<text></text>这使得收盘}问题消失在运行时只发现这一点:"遇到结束标记'TR’没有匹配的开始标记是你的开始/结束标记适当的平衡".
在说服Razor根本不打扰HTML时,我将如何进行这种条件渲染,因为当所有循环完成时HTML都是平衡的.或者至少在使用ASP.NET视图引擎时就是这种情况.
asp.net-mvc ×5
.net-3.5 ×1
architecture ×1
asp.net ×1
c# ×1
caching ×1
encoding ×1
enums ×1
mysql ×1
php ×1
razor ×1
session ×1
sql-server ×1
utf-8 ×1
validation ×1
wcf ×1