使用.NET Razor视图和AngularJS时的最佳做法是什么?
我们正在使用带有razor的mvc4 开发一个公共网站(不是内部网应用程序),我们对客户端脚本不是很熟悉,所以我们从我们所知道的开始:jQuery.但现在事情变得越来越复杂,我们想切换到AngularJS.
在.NET部分,我们使用Razor模板和UIHintAttribute(加上一些自定义模板)来呈现正确的html"控件".我们还添加了自定义html属性,以便为jQuery部分提供额外信息(例如title工具提示....)
所以我们已经使用了一种设置用户界面行为的声明方式,这就是为什么AngularJS似乎是一个不错的选择.
既然我们已经有模型定义服务器端,并且由于AngularJS也使用模型,它不会强迫我们重复代码吗?
我们如何处理数据绑定功能,因为我们已经做了一些绑定服务器端(在视图中).我们是否应该创建一个完全异步的应用程序,从AngularJS调用AJAX来加载数据,或者我们可以将两者混合使用?
在尝试使用这两种技术时,我们应该注意什么?
我在Google上做过一些研究,但是我找不到将Razor视图和模板与AngularJS混合的详细方法......也许这不是一件好事吗?
我已经创建了一个包,我想在Code Window上下文菜单中添加一个菜单.
经过一番搜索后,我找到了几篇解释如何做的文章.问题是,我无法让它工作....
以下是我在vsct文件中的声明:
<Button guid="guidDALGeneratorPkgCmdSet" id="cmdidDataFlow" priority="0x0100" type="Button">
<Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_CODEWIN"/>
<CommandFlag>DynamicVisibility</CommandFlag>
<Strings>
<CommandName>cmdidDataFlow</CommandName>
<ButtonText>Show data flow</ButtonText>
</Strings>
</Button>
Run Code Online (Sandbox Code Playgroud)
和符号:
<GuidSymbol name="guidDALGeneratorPkgCmdSet" value="{d3269a87-a721-49a5-800b-0464fbdfd313}">
<IDSymbol name="MyMenuGroup" value="0x1020" />
<IDSymbol name="cmdidDALGenerator" value="0x0101" />
<IDSymbol name="cmdidDataFlow" value="0x0102" />
</GuidSymbol>
Run Code Online (Sandbox Code Playgroud)
以下是我在Package课堂上添加菜单的方法:
CommandID dataFlowCID = new CommandID(GuidList.guidDALGeneratorPkgCmdSet, (int)PkgCmdIDList.cmdidDataFlow);
OleMenuCommand dataFlowMenu = new OleMenuCommand(showDataFlow, dataFlowCID);
dataFlowMenu.BeforeQueryStatus += new EventHandler(dataFlowMenu_BeforeQueryStatus);
mcs.AddCommand(dataFlowMenu);
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?我必须错过一些东西,因为几乎每个样本(以及关于这个主题的SO答案)都建议在包装中添加一个菜单......
我尝试过的:
IDG_VS_MENU_CONTEXTMENUS而不是IDM_VS_CTXT_CODEWIN(看完这篇文章后:使用vsx如何使用命令创建子菜单?)另外你可以看到我使用这个BeforeQueryStatus …
我有一个抽象的基类Base,它有一些共同的属性,许多派生的基类实现不同的逻辑但很少有其他字段.
public abstract Base
{
protected int field1;
protected int field2;
....
protected Base() { ... }
}
Run Code Online (Sandbox Code Playgroud)
有时我需要克隆派生类.所以我的猜测是,只需Clone在我的基类中创建一个虚方法,只在具有附加字段的派生类中覆盖它,但当然我的Base类不再是抽象的(这不是问题,因为它只有一个protected构造函数).
public Base
{
protected int field1;
protected int field2;
....
protected Base() { ... }
public virtual Base Clone() { return new Base(); }
}
public A : Base { }
public B : Base { }
Run Code Online (Sandbox Code Playgroud)
问题是,因为我无法知道我的Base类中派生类的类型,Base即使我在派生类上调用它,也不会导致类实例?(a.Clone();)(实际上在测试之后这是发生了什么,但也许我的测试没有很好地设计,这就是为什么我对它有疑问)
是否有一种很好的方法(模式)来实现一个基本Clone方法,它可以像我期望的那样工作,或者我必须在每个派生类中编写相同的代码(我真的想避免这种情况......)
谢谢你的帮助