我想我知道答案,但我想反思一些想法.
我想将几个(在这个例子中为2个)一些不同的数据传递给View.我最初的想法是简单地将各种对象包装成一个包含对象并沿着这种方式传递它们.然后从视图中,我会有类似的东西
var objContainer = ViewData.Model;
var thisObject = objContainer.ThisObject;
var thatObject = objContainer.ThatObject;
Run Code Online (Sandbox Code Playgroud)
这些可以在母版页和查看页中单独使用.
这是"最好的"方式吗?
在ASP.NET MVC中,您可以使用如下标记控制器方法AuthorizeAttribute:
[Authorize(Roles = "CanDeleteTags")]
public void Delete(string tagName)
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
这意味着,如果当前登录的用户不在"CanDeleteTags"角色中,则永远不会调用控制器方法.
不幸的是,对于失败,AuthorizeAttribute返回HttpUnauthorizedResult,它总是返回HTTP状态代码401.这导致重定向到登录页面.
如果用户未登录,则这非常有意义.但是,如果用户已登录但未处于所需角色,则将其发送回登录页面会很困惑.
似乎AuthorizeAttribute将身份验证和授权混为一谈.
这似乎是ASP.NET MVC的一个疏忽,或者我错过了什么?
我不得不做一个DemandRoleAttribute将两者分开的东西.当用户未经过身份验证时,它会返回HTTP 401,并将其发送到登录页面.当用户登录但未处于所需角色时,它会创建一个NotAuthorizedResult.目前,这会重定向到错误页面.
当然我不必这样做?
我曾经在嵌入式系统的项目上工作过,我们重新安排了堆栈变量声明的顺序,以减少生成的可执行文件的大小.例如,如果我们有:
void func()
{
char c;
int i;
short s;
...
}
Run Code Online (Sandbox Code Playgroud)
我们会将此重新排序为:
void func()
{
int i;
short s;
char c;
...
}
Run Code Online (Sandbox Code Playgroud)
由于对齐问题,第一个导致使用12个字节的堆栈空间,第二个导致仅8个字节.
这是C编译器的标准行为,还是我们使用的编译器的缺点?
在我看来,编译器应该能够重新排序堆栈变量,以便在需要时支持更小的可执行文件大小.有人向我建议,C标准的某些方面可以防止这种情况,但我无法以任何方式找到信誉良好的来源.
作为一个额外的问题,这也适用于C++编译器吗?
编辑
如果答案是肯定的,那么C/C++编译器可以重新排列堆栈变量,你能给出一个肯定会这样做的编译器的例子吗?我想看看编译器文档或类似的东西支持这一点.
再次编辑
谢谢大家的帮助.对于文档,我能够找到的最好的东西是GCC(pdf)中的最佳堆栈槽分配,由Naveen Sharma和Sanjiv Kumar Gupta撰写,于2003年在海湾合作委员会峰会会议上提交.
这里讨论的项目是使用ADS编译器进行ARM开发.在该编译器的文档中提到,像我所示的排序声明可以提高性能以及堆栈大小,因为ARM-Thumb架构如何计算本地堆栈帧中的地址.该编译器没有自动重新排列本地人以利用这一点.这里链接的论文说,截至2003年,GCC也没有重新安排堆栈帧以改善ARM-Thumb处理器的参考局部性,但它暗示你可以.
我找不到任何明确表示这在GCC中实施过的东西,但我认为这篇论文可以证明你是正确的.再次感谢.
如何配置SSRS/Windows Server 2003,以便我可以通过需要用户名和密码的远程SMTP服务器设置电子邮件传递.
我可以使用SMTP地址和其他参数配置SSRS,但无法使用smtp用户名和密码进行配置.
我一直在寻找,但只能找到模糊的参考设置某种中继,以掩盖SSRS开箱即用的奇怪的smtp功能缺乏.
有任何想法吗?
我正在尝试为php web开发设置Eclipse.我想做的是从Eclipse中预览一个php网页,但我无法弄清楚如何做到这一点.是否有某种集成的Web服务器允许这样做,或者我是否必须设置IIS/Apache才能执行此操作?如果是这样,我是否必须将我的php文件放在Web服务器路径中,或者Eclipse是否自动将文件部署到本地Web服务器?任何信息或链接将非常感谢.
我熟悉C++ RTTI,发现这个概念很有意思.
仍然存在许多滥用它的方法而不是正确使用它(RTTI-switch恐惧会浮现在脑海中).作为开发人员,我发现(并且使用过)只有两种可行的用途(更确切地说,一个半).
您能否分享一些RTTI是问题的可行解决方案,包括示例代码/伪代码?
注意:目标是拥有一个可供初级开发人员可以咨询,批评和学习的可行示例的存储库.
编辑:您将使用C++ RTTI找到下面的代码
// A has a virtual destructor (i.e. is polymorphic)
// B has a virtual destructor (i.e. is polymorphic)
// B does (or does not ... pick your poison) inherits from A
void doSomething(A * a)
{
// typeid()::name() returns the "name" of the object (not portable)
std::cout << "a is [" << typeid(*a).name() << "]"<< std::endl ;
// the dynamic_cast of a pointer to another will return NULL is
// the conversion …Run Code Online (Sandbox Code Playgroud) 当我使用默认模型绑定将表单参数绑定到作为操作参数的复杂对象时,框架会记住传递给第一个请求的值,这意味着对该操作的任何后续请求都会获得与第一个请求相同的数据.参数值和验证状态在不相关的Web请求之间保持不变.
这是我的控制器代码(service表示访问应用程序的后端):
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Create()
{
return View(RunTime.Default);
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(RunTime newRunTime)
{
if (ModelState.IsValid)
{
service.CreateNewRun(newRunTime);
TempData["Message"] = "New run created";
return RedirectToAction("index");
}
return View(newRunTime);
}
Run Code Online (Sandbox Code Playgroud)
我的.aspx视图(强类型为ViewPage<RunTime>)包含如下指令:
<%= Html.TextBox("newRunTime.Time", ViewData.Model.Time) %>
Run Code Online (Sandbox Code Playgroud)
这使用了DefaultModelBinder类,它用于自动绑定我的模型的属性.
我点击页面,输入有效数据(例如时间= 1).应用程序正确保存新对象时间= 1.然后我再次点击它,输入不同的有效数据(例如时间= 2).但是,保存的数据是原始数据(例如,时间= 1).这也会影响验证,因此如果我的原始数据无效,那么我将来输入的所有数据都将被视为无效.重新启动IIS或重建我的代码会刷新持久状态.
我可以通过编写自己的硬编码模型绑定器来解决问题,其中一个基本的简单示例如下所示.
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create([ModelBinder(typeof (RunTimeBinder))] RunTime newRunTime)
{
if (ModelState.IsValid)
{
service.CreateNewRun(newRunTime);
TempData["Message"] = "New run created";
return RedirectToAction("index");
}
return View(newRunTime);
}
internal class RunTimeBinder : DefaultModelBinder
{ …Run Code Online (Sandbox Code Playgroud) asp.net-mvc castle-windsor inversion-of-control defaultmodelbinder
回到90年代,当我第一次开始使用MFC时,我曾经动态链接我的应用程序并发送了相关的MFC DLL.这引起了我一些问题(DLL地狱!)而我改为静态链接 - 不仅仅是为了MFC,而是为了CRT和ATL.除了更大的EXE文件之外,静态链接从来没有给我带来任何问题 - 那么其他人是否有任何缺点?有没有充分的理由重新访问动态链接?我的应用程序现在主要是STL/Boost FWIW.
我想制作一个非常简单的iphone应用程序:一个屏幕只有一个按钮......当点击按钮时会出现一个新屏幕.而已.没有动画,没有,
我已经无休止地尝试让NavBar示例项目执行此操作...并且只有当我使用带有可以点击的表的UINavigationController时它才有效.我已经在XCode中尝试了所有的骨架项目.
当我这样做时,我以为我已经完成了:
[[self navigationController] presentModalViewController:myViewController animated:YES];
Run Code Online (Sandbox Code Playgroud)
但是没有UINavigationController,我无法做到.我只想要一个简单的例子.
非常感谢!
是否可以在不使用DataLoadOptions的情况下在单个查询中加载子实体?
我在asp.net Web应用程序中为每个请求使用一个数据上下文,并试图绕过linq to sql限制,一旦执行查询就无法更改dataloadoptions.
谢谢.
asp.net-mvc ×3
c++ ×3
.net ×1
alignment ×1
c ×1
callstack ×1
cocoa-touch ×1
eclipse ×1
eclipse-pdt ×1
iphone ×1
linker ×1
linq ×1
linq-to-sql ×1
mfc ×1
php ×1
reporting ×1
rtti ×1
smtp ×1