问题标签 [asp.net-mvc-3]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - ASP.NET MVC:_layout.cshtml 中从给定控制器获取变量的逻辑
MVC 新手,如果术语有点偏离,请原谅我。
我正在使用 ASP.NET MVC3 beta 和 VS 2010。
我不确定这是概念错误、语法错误还是什么错误。
基本上,我想做的是,对于_layout.cshtml,我想为任何其ActionResult 将ViewModel.UseJQuery 设置为true 的控制器包含jQuery 脚本。
我是新手,所以我可能是错的,但这似乎是最好的方法(我目前正在尝试)是:
_layout.cshtml 文件:
在各种控制器中
但是,这给了我一个关于必须将 null 转换为布尔值的错误(我假设它没有找到 UseJQuery 标志)。
所以,我的问题有两个:
- 这是解决这个问题的正确方法吗?
- 如果是这样,我在语法上哪里出错了?
我确信这可能只是初学者的痛苦,但我环顾四周,一开始找不到解决方案(我有一本 ASP.NET MVC 书在订购——保证!)
提前感谢您的帮助!
编辑/更新:
这在 MVC 2 和 3 之间可能有所不同吗?例如,开箱即用的 HomeController.cs 的 Index() ActionResult 是:
编辑/更新:发现问题!
哦!我意识到代码在设置变量时有效,但我一直在尝试使用未设置的变量(这当然会导致传递空值而不是 false)。
所以,现在的问题是,我在 _layout.cshtml 中放置了什么逻辑,可以让我捕获 null 并将其设置为 false 呢?
我在想一些事情:
但是,这有一些问题:
- IsNull() 是正确的函数,还是我的语法错误?(在 VS 2010 中缺少对 Razor 的语法支持让我很生气,哈哈)
- 如何在布局中本地设置 UseJQuery 变量?我怀疑 View.UseJQuery 会起作用,因为这是控制器设置的,对吧?
无论如何,我试图设置上述值的错误是“无效的表达式术语'='”,所以我相信 ViewModel 变量集合可能对 View 是只读的?
——肖恩
validation - 如何在 MVC3 中处理服务层验证
我正在开发一个项目,该项目需要为同一模型设置不同的验证集,我们正在努力寻找处理它的最佳解决方案。
一个简化的示例可能是使用我们的客户 DTO:
在我们的第一个视图中,所有字段都是必需的,因为它们在 DTO 中使用 DataAnnotations 显示。
在我们的第二个视图中,FirstName 和 LastName 可能是必需的,但 Title 是可选的,甚至可能不会在视图中表示。
复杂之处在于,我们希望在我们的服务层中存在验证规则(以便我们可以在稍后使用相同的验证提供 API),它可以访问数据注释,并针对它们进行验证,报告备份如果他们不验证,则发送到 UI。
到目前为止,获胜的方法是:
- 每个视图都有一个专用的视图模型,DataAnnotations 存在于该视图模型上。
- 然后,视图模型使用 Automapper 之类的东西映射我们的域对象。
- 然后将域对象传递给存储库和服务以对它们执行操作。
这也意味着:
- 验证不会发生在服务层,因为当对象到达那里时,它们将是域对象而不是视图模型。
有没有更好的方法来为企业应用程序处理这个问题?我们还没有找到解决办法。
asp.net-mvc - ASP.NET MVC 3 和 HTML 帮助程序扩展
我正在尝试弄清楚我是否误解了有关 ASP.NET MVC 的某些内容,或者我是否在 ASP.NET MVC Beta 3 中发现了某种错误。我在使用 HTML Helper 时遇到了 PartialView 拾取错误模型的问题扩展
我的控制器代码如下所示:
在这是一个插入的情况下,属性vm.Id以 -1 开始,在调用MapGeneralViewModel.ToModel之后,它已被持久化到数据库中,并且 query.Id 具有适当的值。
对MapSettingsViewModel.FromModel的调用返回一个新的视图模型,并且我检查了 Id 属性是否正确包含新创建的 id 值。
视图的相关位如下所示:
如果我在视图中放置断点,则Model.Id会正确设置为正确的值。
控制器的实际输出(当Model.Id == 70 时)如下所示:
因此,不使用 HTML 助手的值输出是正确的,但是助手输出的值以某种方式获取了传递给控制器的视图模型!
我不知道这是怎么回事。我尝试了各种方法:
- 使用View()而不是PartialView()
- 将MapGeneralViewModel.FromModel()的结果分配给vm,然后将vm传递给视图
- 使用<%:和<%=
- 将vm设置为 null(旧的视图模型仍然被使用)
- 将传入 id 的值更改为 0(导致在视图中输出 0 而不是 -1)
- 问题并非特定于名为“Id”的属性,我还测试了具有相同结果的其他字段
我是否对这应该如何工作感到困惑,或者我遇到了 beta 错误?如果它有任何区别,这是在 Win7 64 位机器上的本地 Azure 运行时中运行的。
razor - 在 JavaScript 中使用 Razor 视图引擎
使用新的 ASP.NET MVC 3.0 Razor 视图引擎,有没有办法在 javascript 代码中调用它?
在普通视图引擎中,您可以执行类似...
但我找不到任何方法可以用 Razor 做类似的事情。
production - ASP.NET MVC 3 在生产中?
现在 ASP.NET MVC 3 处于测试阶段,并准备好“上线”。在项目中使用是否安全,尽管没有阻止我对安全性、性能和升级到发布版本的易用性感到好奇。
asp.net-mvc - ASP.NET MVC 2 纯 jquery 客户端验证
如何仅使用 jquery 连接我的验证?我不想使用 Microsoft ajax。我在这个博客上看到了我想要的东西,但似乎该文件MicrosoftMvcJqueryValidator.js
已被弃用或取消。
现在有官方方法可以做到这一点吗?可能使用 asp.net mvc 3。
asp.net-mvc-3 - MVC2 - 如何在模板中获取父模型(容器)
我正在使用 DataAnnotations 编写一个 MVC2 应用程序。我有以下模型:
我想为 Bar 创建一个自定义显示模板。我创建了以下模板:
现在,我的问题是Bar 的内部模板我想从我的 model 访问另一个属性。我不想为 FooModel 创建单独的模板,因为我将不得不对所有其他 FooModel 属性进行硬编码。
在使用调试器进行简短调查后,我可以看到:
this.ViewData.ModelMetadata.ContainerType
是FooModel
(如预期的那样)this.ViewData.TemplateInfo
有一个非公共属性VisitedObjects
(类型为System.Collections.Generic.HashSet<object>
),其中包含两个元素:FooModel
和DateTime?
。
如何访问我的 FooModel?我不想使用反射来破解我的方式。
更新:
我已经接受了 mootinator 的回答,因为它在我看来是允许类型安全的最佳解决方案。我也赞成 Tx3 的答案,因为 mootinator 的答案建立在它之上。尽管如此,我认为在这些场景中应该有更好的 MVC 支持,我认为这在现实世界中很常见,但在示例应用程序中却没有。
asp.net-mvc - ASP.NET MVC 下拉编辑器模板
我正在寻找使用 MVC 创建下拉列表编辑器模板的最佳方法。似乎有各种方法,但我找不到最好的方法,每个人的做法似乎都不一样。我也将 MVC3 与 Razor 一起使用,因此首选适用于此的方法。
asp.net-mvc - Razor 语法是否在 UI 标记中提供了引人注目的优势?
我注意到 Scott Guthrie开始在他的博客上提到 Razor,但我不确定它是否适合我的风格。
当然,对于那些非常习惯于“标准”类型的 ASP.Net 标记(内容占位符和内联代码)的人来说,这是一种相当陌生的风格,但对我来说,它只是感觉需要管理很多额外的页面,而且标记不太清晰。
其他人对此有何感受?您认为在构建新的 MVC 页面时应该认真考虑这一点,还是只是试图解决一个不存在的问题?
jquery - 将 Knockout.js 与最新的 jQuery 文件和 ASP.NET MVC 一起使用
我正在尝试将 Knockout.js 与 ASP.NET MVC 3.0 一起使用(标题放弃了,不是吗?!)
我遇到了一些问题(与新的 jQuery Tmpl 引擎比 ASP.NET MVC 3.0 更相关)。
我在测试中使用了 Steve Sanderson 的示例程序,并且大部分都使用新的 Razor 视图引擎复制了他的结果(我不相信 Razor 与我的问题有任何关系)。
http://blog.stevensanderson.com/2010/07/12/editing-a-variable-length-list-knockout-style/
但是,我想用自然的jquery 绑定做更多事情,而不是 HTML 绑定属性。这在淘汰赛的教程中有详细描述。 http://knockoutjs.com/documentation/template-binding.html
但是,正如它所解释的那样,我无法重现这一点。我将在下面显示我的查看代码。我的问题来自{{foreach (i, gift) gifts}}
不起作用的事实。我尝试了许多变体({{foreach (i, gift) gifts()}}
正如我在其他示例中看到的那样)。
我正在使用最新 knockout.js
的文件。我正在使用jQuery 1.4.3.
我正在使用http://ajax.microsoft.com/ajax/jquery.templates/beta1/jquery.tmpl.js
的模板引擎。但是,我也尝试过使用tmpl.js
包含在 knockous.js 网站上的相同文件,并且得到相同的结果。
使用 jQuery 模板时,根据当前规范,模板不会呈现。
在这里可以找到 jQuery 模板标签文档:http: //api.jquery.com/category/plugins/templates/template-tags/
以防有人对我的确切模型感到困惑。如果我替换{{foreach (i, gift) gifts}}
为 { {foreach gift}}
,那么模型会呈现并正确运行,但我不能将 jQuery 本机${property}
声明用于任何内容。