我有以下内容:
@if (Model.PageMeta.Sidebar == PageMetaSidebar.Small) { Html.RenderPartial("_SmallSidebar"); }
Run Code Online (Sandbox Code Playgroud)
在我的包含文件中:
<style "text/css">
#sbr { width: 193px; }
#lft { left: 205px; top: 85px; right: 5px; bottom: 30px; }
#top { left: 215px; top: 85px; right: 15px; }
#btm { left: 215px; right: 15px; bottom: 30px; }
#mdl { left: 215px; top: 85px; right: 15px; bottom: 30px; }
@media print {
div#lft {left:10px; right: 10px; top: 0px;}
div#top {left:20px; right: 20px; top: 0px;}
div#btm {left:20px; right: 20px; }
div#mdl {left:20px; right: 20px; …
Run Code Online (Sandbox Code Playgroud) 如果我的模特有
[DisplayName("First Name")]
public string firstName { get; set; }
Run Code Online (Sandbox Code Playgroud)
然后我可以在View with LabelFor中打印它
@Html.LabelFor(model => model.acc_first)
Run Code Online (Sandbox Code Playgroud)
它将呈现为
<label for="firstName">First Name</label>
Run Code Online (Sandbox Code Playgroud)
使用代码优先方法我想动态地将单个模型映射到多个表名.目前我可以做类似的事情modelBuilder.Entity(Of Person)().MapSingleType().ToTable("Managers")
,因为OnModelCreating
只有在我无法动态地将其映射到其他表名时才调用该方法.
在我们当前的LinqToSql版本中,我们将覆盖MetaModel.GetTable()并使用我们的动态名称返回一个新的TableAttribute.我没有在EF中找到这样的属性(即使我不知道如何覆盖它).所以我的问题是:是否可以这样做(还)?
我发现我可以OnModelCreating
通过调用阻止该方法缓存映射
modelBuilder.CacheForContextType = false;
Run Code Online (Sandbox Code Playgroud)
因此,我可以在对象的实例化上分配表定义.这不是我想要的方式,但它有效.
哦,男孩,上面是一个大错误......缓存存在是有原因的!:)所以我回到POCO对象映射的方块.如果我找到解决方案,我会发布更新.
如果有人关心我目前如何解决这个问题,请点击此处:
首先,我使用POCO表和接口创建了一个单独的库
public interface IDataContext {
System.Data.Entity.DbSet<TableGeneric> TableGeneric { get; set; }
int SaveChanges();
}
public class TableGeneric {
[Key]
public int Column1 { get; set; }
public string Column2 { get; set; }
public DateTime Column3 { get; set; }
public string Column4 { get; set; }
public string Column5 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后,使用CSharpCodeProvider我创建了一个类,它接受以下模板并将其转换为类型定义:
class DataContext : …
Run Code Online (Sandbox Code Playgroud) Visual Studio提供JavaScript Intellisense.很明智地看到您在主页中引用JavaScript文件(例如jQuery文件),然后在应用程序的任何视图中提供语句完成.然而,这似乎与Razor无关.有没有办法让这个与Razor一起工作?ASPX视图引擎提供了这个技巧,例如:<% /* %><script src="~/Scripts/jquery-1.4.1-vsdoc.js"></script><% */ %>
剃刀语法很整洁,几乎没有争论.但我似乎无法在任何地方找到它......
剃刀保留的字是什么?
@using
@inherits
@functions
@section
你还知道吗?
自从我在另一个stackoverflow问题上找到答案(现在精确的一个躲过我)之后,一直困扰着我的事情,用户说的话" 如果你正在调用服务定位器,那你做错了. "
这是一个声誉很高的人(我认为是十万人)所以我倾向于认为这个人可能知道他们在谈论什么.自从我第一次开始学习它以及它与单元测试有什么关系以及什么不是,我一直在为我的项目使用DI.这是我现在很满意的事情,我想我知道自己在做什么.
但是,有很多地方我一直在使用服务定位器来解决项目中的依赖项.一旦主要示例来自我的ModelBinder实现.
典型模型装订器的示例.
public class FileModelBinder : IModelBinder {
public object BindModel(ControllerContext controllerContext,
ModelBindingContext bindingContext) {
ValueProviderResult value = bindingContext.ValueProvider.GetValue("id");
IDataContext db = Services.Current.GetService<IDataContext>();
return db.Files.SingleOrDefault(i => i.Id == id.AttemptedValue);
}
}
Run Code Online (Sandbox Code Playgroud)
不是一个真正的实现 - 只是一个简单的例子
由于ModelBinder实现在首次请求Binder时需要新实例,因此无法在构造函数上使用依赖注入来实现此特定实现.
在我的很多课程中都是这样的.另一个例子是Cache Expiration进程,它在我的网站中缓存对象到期时运行一个方法.我运行了一堆数据库调用,什么不是.我也使用服务定位器来获得所需的依赖项.
我最近遇到的另一个问题(我在这里发布了一个问题)是我的所有控制器都需要一个IDataContext实例,我使用了DI - 但是一个动作方法需要一个不同的IDataContext实例.幸运的是,Ninject通过命名的依赖来救援.然而,这感觉像一个kludge而不是一个真正的解决方案.
我认为我至少理解了分离关注的概念,但是我理解依赖注入和服务定位器模式似乎存在根本性的错误 - 我不知道那是什么.
我目前理解它的方式 - 这也可能是错误的 - 至少在MVC中,ControllerFactory为Controller查找构造函数并调用服务定位器本身以获取所需的依赖关系,然后将它们传入.但是,我可以理解,不是所有的类和没有工厂创建它们.所以在我看来,一些服务定位器模式是可以接受的......但......
我想就是这样 - 我无法想到任何其他问题来帮助我理解,但非常感谢任何额外的信息.
我知道DI可能不是解决所有问题的方法,但我可能会在实现它的过程中过分关注,但是,它似乎按照我期望的方式进行单元测试,而不是.
我不是在寻找代码来修复我的示例实现 - 我正在寻找学习,寻找解释以修复我的错误理解.
我希望stackoverflow.com能够保存草稿问题.我也希望无论谁回答这个问题都能获得适当的声誉来回答这个问题,因为我觉得我要求很多.提前致谢.
dependency-injection ninject service-locator abstract-factory asp.net-mvc-3
是否可以从数据库而不是从磁盘上的文件加载视图?它不一定是数据库,可以是任何字符串.
我想我过早地问过这个问题......我仍然期待任何答案,但我肯定会先做一些研究.
所以我写了一个快速的样本,做了我想要的 - 一点.我会发布更新,因为我让一切正常.
public class DbPathProvider : VirtualPathProvider {
public DbPathProvider() : base() {
}
public override bool FileExists(string virtualPath) {
if (virtualPath.StartsWith("/test") || virtualPath.StartsWith("~/test"))
return true;
return base.FileExists(virtualPath);
//deal with this later
}
public override VirtualFile GetFile(string virtualPath) {
if (virtualPath.StartsWith("/test") || virtualPath.StartsWith("~/test"))
return new DbVirtualFile(virtualPath);
return base.GetFile(virtualPath);
//deal with this later
}
public class DbVirtualFile : System.Web.Hosting.VirtualFile {
public DbVirtualFile(string path) : base (path) {
//deal with this later
}
public override System.IO.Stream Open() { …
Run Code Online (Sandbox Code Playgroud) 我想知道以下代码是否有任何我在网络服务器上运行时不知道的问题.阅读优秀的系列丛书http://reedcopsey.com/series/parallelism-in-net4/我无法找到与我的问题有关的任何内容,与msdn相同,所以我想我会把它带到这里.
示例电话:
public ActionResult Index() {
ViewBag.Message = "Welcome to ASP.NET MVC!";
Task.Factory.StartNew(() => {
//This is some long completing task that I don't care about
//Say logging to the database or updating certain information
System.Threading.Thread.Sleep(10000);
});
return View();
}
Run Code Online (Sandbox Code Playgroud) 所以这两种方法具有相同的签名但不同的约束
public static void Method<T>(ref T variable) where T : struct { }
public static void Method<T>(ref T variable) where T : class { }
Run Code Online (Sandbox Code Playgroud)
但它们不能在单个类中定义,因为它们具有相同的签名.但在这种特殊情况下,它们是相互排斥的.(除非我错了)
我知道你可以添加额外的约束class
,struct
但你不能同时指定struct
和class
使用相同的方法.那么为什么这会无法编译呢?
我无法弄清楚如何在Razor中进行"嵌套"操作.例如,如何在FOREACH中使用IF.VisualStudio在后面的块上抛出编译时错误,说"如果'无效的表达式术语'"
@foreach (var document in Model) {
@if (document.Item.Count > 0) {
<div>
@MvcHtmlString.Create(document.Items[0].ContentPresenter)
</div>
}
}
Run Code Online (Sandbox Code Playgroud)