我有一个ASP.NET MVC项目,其中有一个静态类来初始化一些AutoMapper映射:
static class AutoMappingConfiguration
{
static AutoMappingConfiguration()
{
SetupMappings();
}
static void SetupMappings()
{
AutoMap.CreateMap<Product, ProductDTO>();
// more mappings
}
}
Run Code Online (Sandbox Code Playgroud)
在静态构造函数中设置断点会告诉我,当我运行项目时它永远不会被击中.我必须在以下方面明确调用该方法MvcApplication.Application_Start():
AutoMappingConfiguration.SetupMappings();
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么这个静态类不是由ASP.NET MVC构造的?这是否与IIS的"动态编译"性质有关?如果是这样,我是否必须显式调用静态方法,或者是否有某种方法来配置项目以初始化静态类?
我有3种不同类型的数据:图像,视频和音频剪辑.每个都有一个相关的GPS点,所以我有一个基类:
public abstract class Data {
public Latitude { get; set; }
public Longitude { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这样我就可以在地图上绘制所有内容,而不必担心它是什么类型的数据.但是,我一直在读POCO不应该是从objectC#中的基类以外的任何东西派生的.这是真的?
HashSet没有AddRange方法,所以我想为它编写一个扩展方法.这就是我所拥有的:
public static void AddRange<T>(this ICollection<T> collection, IEnumerable<T> list)
{
foreach (var item in list)
{
collection.Add(item);
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个基类,Media和派生类Photo.这是我想要的代码:
var photos = new List<Photo>();
var media = new HashSet<Media>();
media.AddRange(photos);
Run Code Online (Sandbox Code Playgroud)
然而,编译器告诉我,它无法转换List<Photo>到IEnumerable<Media>,当我尝试使用AddRange().我很确定这是因为我有IEnumerable<T>扩展方法,但是如何编写它以使类型与类型不同AddRange<T>?
我有一个NHibernate存储库,如下所示:
public class NHibRepository : IDisposable
{
public ISession Session { get; set; }
public ITransaction Transaction { get; set; }
// constructor
public NHibRepository()
{
Session = Database.OpenSession();
}
public IQueryable<T> GetAll<T>()
{
Transaction = Session.BeginTransaction();
return Session.Query<T>();
}
public void Dispose()
{
if (Transaction != null && Transaction.IsActive)
{
Transaction.Rollback(); // ObjectDisposedException on this line
}
Session.Close();
Session.Dispose();
}
~NHibRepository()
{
Dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
当我像这样使用存储库时,运行正常:
using (var repo = new NHibRepository())
{
Console.WriteLine(repo.GetAll<Product>().Count());
}
Run Code Online (Sandbox Code Playgroud)
但是当我像这样使用它时,它会抛出ObjectDisposedException:
var …Run Code Online (Sandbox Code Playgroud) 我有一个Model Glue CFM页面index.cfm,其中包含一些我想要执行的JS代码:
<script type="text/javascript">
$(function() {
$('#text').height(300);
});
</script>
<p id="text">This is some text</p>
Run Code Online (Sandbox Code Playgroud)
这将被插入到CFM模板中,如下所示:
<html>
<head>
<script type="text/javascript" src="js/jquery.js"></script>
</head>
<body>
<cfoutput>#viewCollection.getView("body")#</cfoutput>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
以及相关部分ModelGlue.xml:
<event-handler name="page.index">
<views>
<include name="body" template="pages/index.cfm"/>
<include name="main" template="templates/main.cfm"/>
</views>
</event-handler>
Run Code Online (Sandbox Code Playgroud)
不幸的是,这会将Javascript部分直接粘贴到正文中.有没有办法将它放在<head>标签中而不必创建单独的CFM文件,类似于ASP.NET MVC 3 Razor @section标签的工作方式?
如果您按照官方Model-Glue文档提供的快速入门指南,请在此处找到:
看起来"模型"是执行应用程序操作的类.在这个例子中,他们创建了一个Translator将一个短语翻译成Pig Latin的类.从这里可以很容易地推断出程序逻辑也应该是"模型",例如数据库操作类和HTML帮助程序.
但是,我最近收到了一个关于我在这里询问有关MVC的问题的答案:
使用MVC,我如何设计视图,以便它不需要知道控制器设置的变量?
在其中一个答案中,提到MVC中的"模型"应该是控制器填充数据的对象,然后将其传递给视图,并且视图将其用作强类型对象来呈现数据.这意味着,对于上面提供的模型胶水例如,应该已经是一个翻译器,一个翻译观点,一PigLatinTranslator类,和Translation看起来像这样的模式:
component Translation
{
var TranslatedPhrase = "";
}
Run Code Online (Sandbox Code Playgroud)
这个控制器会像这样使用它:
component TranslatorController
{
public function Translate(string phrase)
{
var translator = new PigLatinTranslator();
var translation = new Translation();
translation.TranslatedPhrase = translator.Translate(phrase);
event.setValue("translation", translation);
}
}
Run Code Online (Sandbox Code Playgroud)
视图将呈现如下:
<p>Your translated phrase was: #event.getValue("translation").TranslatedPhrase#</p>
Run Code Online (Sandbox Code Playgroud)
在这种情况下,PigLatinTranslator它只是一个驻留在某处的类,不能被视为模型,控制器或视图.
我的问题是,ColdFusion Model-Glue的模型与MVC模型不同吗?或者是快速入门指南,他们提供了一个糟糕的MVC示例,以及我在上面列出的正确方法的代码?或者我完全偏离了所有这一切?
我有一个选项按钮,当单击时,将在按钮下方显示一个下拉列表(类似于上下文菜单).我遇到的问题是,如果其中一个<li>元素<ul>太长,它将包装文本:
http://img202.imageshack.us/img202/6933/optionsdk.png
请注意" 转让所有权 "选项是如何自动换行的.
我知道我可以在<ul>元素上设置一个足够长的固定宽度以防止自动换行,但我希望它是流畅的,因为选项会根据我所在的页面而改变,有些页面只有短项目.如果我设置了固定宽度,那些只有短选项的页面看起来会过长,空格太多.
有没有人知道如何<ul>扩展它的宽度,以便没有<li>文字包装元素?我有一个jsFiddle,你可以搞乱:
我的数字必须至少为7位数.例如:
0000001
123456789
0012345
Run Code Online (Sandbox Code Playgroud)
都是有效的.只有当它的长度低于7时,我才需要用0填充数字.如何在SQL Server中执行此操作?我能够得到的最好的是如果长度小于7,则填充数字,但是高于该数字,它开始截断数字.
我个人使用while(true)无限循环,但我已经看到在线使用的示例for(;;).实际上,这两者之间是否有任何差异,还是只是一种风格?
我有一个Javascript对象:
var errorMap = {
100: 'You must enter a name.',
200: 'You must enter an address.',
300: 'You must enter a DOB.'
}
Run Code Online (Sandbox Code Playgroud)
在我的代码的另一部分,我收到一组错误代码:
var errorCodes = [100, 200, 500, 600];
Run Code Online (Sandbox Code Playgroud)
我想要做的是将errorCodes数组与errorMap对象的键进行比较,并返回没有相应键的所有错误代码errorMap.在这种情况下,我想得到这个:
[500, 600]
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?我可以访问jQuery.
c# ×5
coldfusion ×2
coldfusion-9 ×2
jquery ×2
model-glue ×2
asp.net-mvc ×1
constructor ×1
css ×1
dispose ×1
for-loop ×1
generics ×1
hashset ×1
iis ×1
javascript ×1
loops ×1
nhibernate ×1
poco ×1
session ×1
sql ×1
sql-server ×1
static ×1
transactions ×1
while-loop ×1