小编awr*_*ley的帖子

MVC 3 - 嵌套布局 - 部分不在区域中渲染

问题:

给定这个嵌套的布局结构:

~/Views/Shared/_layoutBase.cshtml
~/Views/Shared/_layout.cshtml

_layoutBase.cshtml布局在哪里_layout.cshtml.

布局文件中定义的任何部分都会在其下的页面中呈现其内容 ~/Views/...

但是,对于区域中的视图,从不渲染这些部分.

建立:

_layoutBase:

<script type="text/javascript">
        @RenderSection("footerScripts", false)
    </script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

_layout.cshtml:

@section footerScripts{
    @RenderSection("footerScripts", false)
}
Run Code Online (Sandbox Code Playgroud)

"内容"观点:

@section footerScripts{
$(function () {
    SetFocusOnForm("CaptchaCode", "NextButton");
});
}
Run Code Online (Sandbox Code Playgroud)

段的内容footerScripts永远不会在区域的视图中呈现.它确实在~/Views文件夹下的视图中呈现.

面积_ViewStart.cshtml:

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
} 
Run Code Online (Sandbox Code Playgroud)

题:

你能看到什么问题吗?!

razor asp.net-mvc-3

10
推荐指数
2
解决办法
8472
查看次数

真实世界的ASP.NET MVC存储库

在现实世界中,控制器可能需要使用来自各种数据库表和其他数据存储的数据.例如:

[Authorize]
    public class MembersController : Controller
    {
        ICourseRepository repCourse;
        IUserCourseRepository repUserCourse;
        IMember member;
        public MembersController(ICourseRepository repCourse, IUserCourseRepository repUserCourse, IMember member)
        {
            this.repCourse = repCourse;
            this.repUserCourse = repUserCourse;
            this.member = member;
        }
Run Code Online (Sandbox Code Playgroud)

所以:

  1. 我应该为每个表使用存储库吗?

  2. 我想这是agregates的概念发挥作用的地方?我应该每个聚合有一个存储库吗?

  3. 我是否只需要向Controller的构造函数添加所需数量的存储库?

  4. 这是我的设计错误的标志吗?

注意:

IMember接口本质上代表一个帮助对象,它在成员资格提供程序上放置了一个很好的面孔.即,它将所有代码放在一个地方.例如:

        Guid userId;
        public Guid UserId
        {
            get
            {
                if (userId == null)
                {
                    try
                    {
                        userId = (Guid) Membership.GetUser().ProviderUserKey;
                    }
                    catch { }
                }
                return userId;
            }
        }
Run Code Online (Sandbox Code Playgroud)

这方面的一个问题肯定是缓存这种输出.我可以感受到另一个问题.

编辑:

我正在使用Ninject进行DI而且在整个DI,DDD和TDD上都很畅销.好吧,有点.我也试图成为一个实用主义者......

asp.net-mvc repository ddd-repositories repository-pattern multiple-repositories

8
推荐指数
1
解决办法
1906
查看次数

MVC 3 + $ .ajax - 响应似乎是从部分视图缓存输出

我一定是想念一些傻瓜,但这就是问题所在.

我在Transactions控制器上有一个Create动作.Create.cshtml使用jQuery通过调用$ .ajax将表单发布到服务器.调试显示所有内容都按预期到达服务器.我使用表单数据来更新记录:这也可以正常工作.然后我返回一个局部视图,将模型传递给具有默认数据的视图.我可以调试并验证模型是否传递空值和0,即我的模型的默认数据.

问题是,在响应中发送回浏览器的是旧数据......!

我没有理由看到原因.希望你能......

注意:我没有使用任何形式的输出缓存.

编辑1:

缓存不会在浏览器中发生.我说的原因是我可以在Firebug中看到对AjaxCreate Action的调用的响应.我也可以在Fiddler中看到这一点.

编辑2:

如果查看部分视图的代码,您会看到每个下拉列表或文本框的值都是@ Model.Transaction.[Property]打印在它旁边.奇怪的是,这显示了正确的值,即我的Transaction对象的默认值,但是下拉列表和文本框坚持使用发布到服务器的值,而不是每个应该呈现的属性的默认值.

编辑3:

我已经包含了下面的图像,因此您可以看到正在传入的每个控件右侧打印的值.然而,控件反映了在之前的$ .ajax调用中发布到服务器的旧数据.(注释显示创建视图模型时的日期时间,这样我可以看到更新的内容).

编辑4:

我发现用@ Html.TextBox助手替换@ Html.EditorFor(...)(参见下面的视图代码)可以解决问题.所以,似乎正在发生的事情是EditorFor助手正在引发问题.为什么?我不知道,但会发布另一个更具体的问题.

缓存问题

代码和标记如下:

jQuery的:

$(document).ready(function () {

    $('input[name="nextRecord"]').live('click', function () {
        var theForm = $(this).closest('form');
        if ((theForm).valid()) {
            var buttonText = $(this).val();
            var action = "/input/Transactions/AjaxCreate/";
            if (buttonText === "Reset") {
                clearForm(theForm);
            }
            else {
                var targetElement = $('#CreateDiv');
                var _data = theForm.serialize() + '&nextRecord=' + $(this).val();

                $.ajax({
                    url: action,
                    data: _data,
                    cache: 'false',
                    type: 'POST',
                    dataType: 'html',
                    success: function (html) {
                        $(targetElement).html(html); …
Run Code Online (Sandbox Code Playgroud)

jquery asp.net-mvc-3

8
推荐指数
1
解决办法
3336
查看次数

Elmah.MVC 2.0.1 - 保护elmah日志

建立:

对于ASP.NET MVC 4应用程序,我使用Elmah.MVC 2.0.1来记录错误.

我使用NuGet安装了Elmah.MVC.它工作正常.

问题:

Elmah.MVC包不安装任何控制器或区域,因此我看不到通过Authorize属性应用安全性的明显方法,如ASP.NET MVC所推荐的那样.

题:

我只希望Admin角色的用户能够查看Elmah页面.

我该怎么做呢?

elmah asp.net-mvc-4 elmah.mvc

8
推荐指数
1
解决办法
3121
查看次数

ELMAH:Elmah的页面没有样式,难以阅读

建立:

我在ASP.NET MVC 4站点上通过NuGet安装了ELMAH.

在开发机器上,应用程序安装在根目录下.这一切都有效,并且通常是ELMAH页面.它总是这样,我的意思是开发机器上的工作,不是吗?

但是在服务器上,应用程序安装在子文件夹(〜/ tracker)中.虽然ELMAH工作正常,但页面没有样式,因此难以阅读.

题:

我需要做些什么才能让页面变得风格化?

据推测,样式来自可以在web.config中配置的资源.但是怎么样?

编辑:

我发现我收到了一个高度相关的错误:

System.Web.HttpException: A public action method 'stylesheet' was not found on controller 'Elmah.Mvc.ElmahController'.
Run Code Online (Sandbox Code Playgroud)

路径如下:

/tracker/elmah/stylesheet
Run Code Online (Sandbox Code Playgroud)

这显然与ELMAH页面源中的Link标签有关:

<link rel="stylesheet" type="text/css" href="/tracker/elmah/stylesheet" />
Run Code Online (Sandbox Code Playgroud)

但是如何配置此网址?

elmah elmah.mvc

8
推荐指数
1
解决办法
1693
查看次数

ListBox for ArgumentNullException参数名称:source

建立:

我使用MvcScaffolding搭建了一个控制器.

对于一个属性Model.IdCurrencyFrom,脚手架创建了一个Html.DropDownListFor:

@Html.DropDownListFor(model => model.IdCurrencyFrom, 
    ((IEnumerable<FlatAdmin.Domain.Entities.Currency>)ViewBag.AllCurrencies).Select(option => new SelectListItem {
        Text = (option == null ? "None" : option.CurrencyName), 
        Value = option.CurrencyId.ToString(),
        Selected = (Model != null) && (option.CurrencyId == Model.IdCurrencyFrom)
    }), "Choose...")
Run Code Online (Sandbox Code Playgroud)

无论是使用新记录还是编辑现有记录,这都可以正常工作.

问题:

只有3种货币,AR $,US $和GB£.因此,我想要一个ListBox而不是下拉列表.

所以我把上面改为:

@Html.ListBoxFor(model => model.IdCurrencyFrom, 
    ((IEnumerable<FlatAdmin.Domain.Entities.Currency>)ViewBag.AllCurrencies).Select(option => new SelectListItem {
        Text = (option == null ? "None" : option.CurrencyName), 
        Value = option.CurrencyId.ToString(),
        Selected = (Model != null) && (option.CurrencyId == Model.IdCurrencyFrom)
    }))
Run Code Online (Sandbox Code Playgroud)

我现在得到一个ArgumentNullException,参数名称:source,但仅在编辑现有记录时.创建新记录,这很好.

问题:

怎么了?!

什么也没有变.切换回DropDownListFor,一切正常.切换到ListBox(而不是ListBoxFor),我得到错误.

该模型不为null(就像我说的,它适用于DropDownListFor)...而且我的想法已经用完了.

asp.net-mvc asp.net-mvc-3 asp.net-mvc-scaffolding html.listboxfor

7
推荐指数
1
解决办法
1570
查看次数

MVC 3 + knockoutjs:在使用EditorFor作为布尔字段时添加data-bind属性

使用@Html.EditorFor(model =>model.IsClient),其中IsClient是布尔值,使用Not Set, Yes and No选项呈现下拉列表.

一切都很好.

现在我想将knockoutjs与我喜欢的结果下拉列表一起使用,那么如何使用@ Html.EditorFor添加data-bind属性,我需要使用knockoutjs来处理这个下拉列表?

我试过了:

@Html.EditorFor(model => model.IsClient, new Dictionary<string, object> { { "data-bind", "value: Account.IsClient" } })
Run Code Online (Sandbox Code Playgroud)

但是,它使用对象additionalViewData参数,并且它不呈现data-bind属性.这可能很自然,因为此参数可能与渲染标记的Html属性无关.

但是,找不到任何合理的文档,并且没有其他重载看起来可能是我想要的候选者.

TIA有什么建议.

asp.net-mvc-3 knockout.js

6
推荐指数
2
解决办法
7421
查看次数

Chrome,CSS - 缩放敏感布局

建立:

我有一个带圆角的简单盒子,它有一个标题,并根据文本的数量进行扩展,如Dan Cederholm的Bullet Proof Web Design(ISBN 0-321-34693-9)中所述.

效果很好,除了放大谷歌浏览器外.然后框的右边缘消失.

它可以在IE和FireFox中正常运行.

例:

jsFiddle中的示例

在chrome中,它在缩放110%和其他缩放时也失败了.在IE或FireFox中没有问题.

问题:

  1. 是什么原因引起了这个?

  2. 一般来说,是什么让布局变焦敏感(如果存在任何这样的一般规则......)?

  3. Dan Cederholm的书真的是防弹......?

css google-chrome page-zoom

6
推荐指数
2
解决办法
6984
查看次数

MVC SiteMap - 当不同节点指向同一个动作时,SiteMap.CurrentNode不会映射到正确的路径

建立:

我正在使用ASP.NET MVC 4,使用mvcSiteMapProvider来管理我的菜单.

我有一个自定义菜单构建器,用于评估节点是否在当前分支上(即,如果SiteMap.CurrentNode是CurrentNode或CurrentNode是否嵌套在它下面).代码包含在下面,但基本上检查每个节点的url并将其与currentnode的url进行比较,直到currentnodes"family tree".

我的自定义菜单构建器使用CurrentBranch添加一个类,该类突出显示CurrentBranch上的菜单项.

问题:

我的自定义菜单工作正常,但我发现,mvcSiteMapProvider似乎没有评估urlCurrentNode以一致的方式:

当两个节点指向同一个操作并且仅通过操作的参数进行区分时,SiteMap.CurrentNode似乎不使用正确的路径(它忽略区分参数并默认为映射到中定义的操作的第一个路径)节点).

问题示例:

在我的应用程序中Members.

会员的MemberStatus字段可以是"未处理","活动"或"非活动".要更改MemberStatus,我ProcessMemberController在一个名为Admin的区域中有一个.使用上的Process操作完成处理ProcessMemberController.

我的mvcSiteMap有两个节点,它们都映射到Process动作.它们之间的唯一区别是alternate参数(例如我的客户端的域语义),在一种情况下,其值为"已处理",而在另一种情况下为"未处理":

节点:

    <mvcSiteMapNode title="Process" area="Admin" controller="ProcessMembers" action="Process" alternate="Unprocessed" />
    <mvcSiteMapNode title="Change Status" area="Admin" controller="ProcessMembers" action="Process" alternate="Processed" />
Run Code Online (Sandbox Code Playgroud)

路线:

这两个节点的相应路由(同样,区别它们的唯一方法是备用参数的值):

context.MapRoute(
                    "Process_New_Members",
                    "Admin/Unprocessed/Process/{MemberId}",
                    new { controller = "ProcessMembers", 
                        action = "Process", 
                        alternate="Unprocessed", 
                        MemberId = UrlParameter.Optional }
                );


context.MapRoute(
                    "Change_Status_Old_Members",
                    "Admin/Members/Status/Change/{MemberId}",
                    new { controller = "ProcessMembers", 
                        action …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc-4 mvcsitemapprovider

6
推荐指数
1
解决办法
5897
查看次数

ASP.NET MVC 3模型绑定 - 与输入id ="Title"的ViewBag.Title冲突

ViewBag动态属性似乎存在问题.让我们说:

@{
    ViewBag.Title = @Model.CourseName;
}
Run Code Online (Sandbox Code Playgroud)

然后在页面上我有一个表格:

@Html.TextBox("Title", null, new {style="width:400px;"})
Run Code Online (Sandbox Code Playgroud)

其中Title是数据库表中字段的名称.

首次打开页面时,ID为"Title"的文本框将获取ViewBag.Title动态属性的值.

我对模型绑定的确切细节有点模糊,但这似乎是一个错误,或者如果没有,如果它是由于绑定过程而自然发生的事情,那么警告它会很好这个.

我找到的工作是将ViewBag属性重命名为:

@{
    ViewBag.Titulo = @Model.CourseName;
}
Run Code Online (Sandbox Code Playgroud)

(标题改为Titulo - 总是很高兴知道另一种语言以避免姓名冲突......)

问题消失了.

但问题是:

这种行为是期待的吗?这个漏洞很容易找到(花了一个小时来弄清楚,包括写这个问题),但我怀疑其他漏洞可能更多,嗯,晦涩难懂.

编辑:

解释这个问题:

Model Binder是否自动绑定它在ViewBag中找到的属性?即使强类型ViewModel中存在现有属性,我已经传递到页面?当然ViewModel应该优先考虑吗?

model-binding name-clash viewbag asp.net-mvc-3

5
推荐指数
1
解决办法
2490
查看次数