小编Luc*_*Sam的帖子

ASP.NET MVC/LINQ:在View中迭代Linq.EntitySet的正确方法是什么?

好的,所以我有一个强类型的客户"详细信息"视图,它采用Customer对象模型.

我正在使用LINQ to SQL,每个客户都可以拥有多个(停车)空间.

这是数据库中的FK关系,因此我的LINQ生成的Customer模型具有"Spaces"集合.大!

这是来自我的CustomerRepository的代码片段,我遍历客户的停车位以删除所有付款,空间,最后是客户:

public void Delete(Customer customer)
{
    foreach (Space s in customer.Spaces)
        db.Payments.DeleteAllOnSubmit(s.Payments);
    db.Spaces.DeleteAllOnSubmit(customer.Spaces);
    db.Customers.DeleteOnSubmit(customer);
}
Run Code Online (Sandbox Code Playgroud)

一切都按预期工作!

现在在我的"详细信息"视图中,我想用客户的空间填充表格:

<% foreach (var s in Model.Spaces)
   { %>
    <tr>
        <td><%: s.ID %></td>
        <td><%: s.InstallDate %></td>
        <td><%: s.SpaceType %></td>
        <td><%: s.Meter %></td>
    </tr>
<% } %>
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

foreach语句不能对'System.Data.Linq.EntitySet'类型的变量进行操作,因为'System.Data.Linq.EntitySet'不包含'GetEnumerator'的公共定义

最后,如果我将这段代码添加到我的Customer部分类中并使用视图中的foreach迭代ParkingSpaces,一切都按预期工作:

public IEnumerable<Space> ParkingSpaces
{
    get
    {
        return Spaces.AsEnumerable();
    }
}
Run Code Online (Sandbox Code Playgroud)

这里的问题是我不想重复自己.我也在想我可以使用ViewModel将Spaces集合传递给View,但是LINQ已经推断并在Customer模型上创建了Spaces属性,所以我认为只使用它是最干净的.

我错过了一些简单的事情,或者我是否正确地接近这个?

谢谢!

entityset linq-to-sql asp.net-mvc-2

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

ASP.NET MVC:如何处理具有许多属性的视图模型?

所以我有几乎1:1的视图比例来查看模型,事情似乎进展顺利.如果我正确理解他们的目的,那么看起来应该是视图模型

  1. "删除"实体模型,以便只将相关属性传递给表示层
  2. 在创建地址时添加演示文稿所需的其他信息,例如州名缩写列表或联系人类型.

在努力遵守这些原则时,我的报告控制器有点像墙.为客户生成的各种报告需要访问大约30个左右的不同属性.因此,我的视图模型最终看起来与我的实体模型非常相似.

当然,最简单的解决方案是将实体模型传递给视图,这样我就可以访问所有属性,但是我还需要能够为空白或"不完整"的客户生成报告.这会导致问题在尝试访问我的Entity模型上的导航属性时将引用异常.

所以我可以对视图中的每个字段使用空检查,这看起来不太吸引人......或者我可以实现视图模型以避免空引用异常.问题是我最终得到了一个看起来像这样的视图模型:

var customer = customersRepository.GetCustomer(id);
var viewModel = new CustomersViewModel()
{
    FirstName = customer.FirstName,
    LastName = customer.LastName,
    Address = customer.MailingAddress.Address,
    City = customer.MailingAddress.City,
    // and on and on for about 30 different properties
};
return View(viewModel);
Run Code Online (Sandbox Code Playgroud)

输入所有这些属性是其中一个感觉错误的事情.我错过了一个更优雅的解决方案吗?

c# asp.net-mvc viewmodel

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

ASP.NET MVC/C#:我可以避免在单行C#条件语句中重复自己吗?

在视图中的表中显示Customer的邮件地址时,请考虑以下代码:

<%: Customer.MailingAddress == null ? "" : Customer.MailingAddress.City %>
Run Code Online (Sandbox Code Playgroud)

我发现自己使用了相当数量的这些三元条件语句,我想知道是否有一种方法可以在条件中引用回被评估的对象,以便我可以在表达式中使用它.也许是这样的事情:

<%: Customer.MailingAddress == null ? "" : {0}.City %>
Run Code Online (Sandbox Code Playgroud)

这样的事情存在吗?我知道我可以创建一个变量来保存值,但是将所有内容保存在视图页面中的一个紧凑的小语句中会很好.

谢谢!

c# asp.net-mvc

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

如何在HTML中创建这个简单的表单示例?

我是一名HTML/CSS设计经验有限的开发人员.我一直试图创建这个简单的表格超过一个小时,所以我放弃并寻求帮助.

简单形式示例

我尝试过这样的事情:

<ul>
    <li><label>Name:</label><span class="line">&nbsp</span></li>
    ...
</ul>

li label {
    display: inline-block;
}

li span {
    display: inline-block;
    width: 100%;
    border-bottom: 1px solid #000;
}
Run Code Online (Sandbox Code Playgroud)

我不知道如何表达我希望跨度占据标签和包含div之间宽度的100%.

我希望渲染的HTML看起来与我的示例图像完全一样.也就是说,整个列表项不应加下划线,只应填写客户填写信息的空间.

请让我知道如何实现这一目标.谢谢!!!

html css

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

C#:当有多个类型参数时,为什么泛型类型推断不起作用?

这是两个样本:

这很好用:

void Main()
{
    var list = Queryable.ProjectTo(typeof(Projection));
}

public static class QueryableExtensions
{
    public static ProjectionList<T> ProjectTo<T>(this IQueryable<T> queryable, Type projectionType)
    {
        return new ProjectionList<T>(queryable, projectionType);
    }
}
Run Code Online (Sandbox Code Playgroud)

这会引发以下错误:

使用泛型方法'QueryableExtensions.ProjectTo(System.Linq.IQueryable)'需要2个类型参数

void Main()
{
    var list = Queryable.ProjectTo<Projection>();
}

public static class QueryableExtensions
{
    public static ProjectionList<T, P> ProjectTo<T, P>(this IQueryable<T> queryable)
    {
        return new ProjectionList<T, P>(queryable);
    }
}
Run Code Online (Sandbox Code Playgroud)

当然第一个例子需要1个类型参数,但是编译器可以弄清楚它是什么,所以我不需要提供任何参数.第二个例子需要2个类型的参数,但是编译器知道T是什么,为什么它不仅要求不能推断的?

为了记录我在我的代码中使用第一个例子就好了,但我更喜欢第二个的语法更好,并且可能存在我希望具有投影的泛型类型的情况.有没有办法实现这一点,还是我咆哮错误的树?

谢谢!

c# generics

4
推荐指数
1
解决办法
828
查看次数

WPF/C#:如何在TabControl中引用TabItems?

我确信有一些我想念的简单,但我必须承认,此时我不知所措.

我以编程方式将TabItems添加到我的主TabControl,每个用户选择打开一个帐户.在创建和添加新的TabItem之前,我想检查用户是否已在另一个选项卡中打开该帐户.我不想最终打开两个相同的标签.

这是我最初编写的代码.希望它能让您了解我想要实现的目标.

    if (tab_main.Items.Contains(accountNumber))
    {
        tab_main.SelectedIndex = tab_main.Items.IndexOf(accountNumber);
    }
    else
    {
        Search s = new Search(queryResults, searchText);
        TabItem tab_search = new TabItem();
        tab_search.Header = searchString;
        tab_search.Name = accountNumber;
        tab_search.Content = s;
        tab_main.Items.Add(tab_search);
    }
Run Code Online (Sandbox Code Playgroud)

当然这不能正常工作.在WinForms中,TabControl有一个带有ContainsKey方法的TabPages集合,我可以用它来搜索TabPage的名称.我没有得到Items.Contains()方法正在寻找的东西,因为它只指定一个对象作为参数,并且不引用该项目的名称!

非常感谢任何和所有的帮助.

谢谢!

c# wpf tabcontrol tabitem

3
推荐指数
1
解决办法
1万
查看次数

有没有跨浏览器的方式我可以使用javascript打印后触发事件?

所以我需要能够打印一个jQuery UI对话框.到目前为止,我的解决方案使我创建了一个"打印"按钮,创建一个<iframe>填充了对话框内容的新内容,然后打印出来.

我希望能够<iframe>在打印完成后立即将其删除.有什么方法可以做到这一点吗?我知道在IE中有一个onAfterPrint事件,但我需要它在所有浏览器中都能运行.

谢谢!

编辑:我欣赏其他建议,但我遇到了各种问题,试图使用CSS规则来打印jQuery对话框.在具有大量内容和多个对话框的页面上,叠加层和其他元素的结构将导致打印额外的空白页.我尝试过很多{visibility:hidden; }和{display:none; 但无法找到解决方案.

javascript jquery javascript-events

3
推荐指数
1
解决办法
408
查看次数

如何订购jQuery包装集?

我需要能够在包装集中获得最顶层的".ui-dialog"元素.

我的第一个想法是做这样的事情:

var topDialog = $(".ui-dialog").orderBy("[style*=z-index]").eq(0);
Run Code Online (Sandbox Code Playgroud)

有没有比编写循环检查值更好的方法呢?

编辑:只是为了澄清......我需要能够在页面生命周期中的任何给定点获得最顶层的元素(打开和关闭多个对话框后).Nick Craver使用maxZ变量的答案似乎不起作用,因为删除对话框时变量不会减少.

这是我现在使用的循环,当我关闭一个看起来有点难看的对话框时:

// Enable printing of the top-most dialog or #page
if ($(".ui-dialog").length > 0) {

    var top = $(".ui-dialog").first();

    $(".ui-dialog").each(function () {
        if ($(this).css("z-index") > top.css("z-index")) {
            top = $(this);
        }
    });

    top.removeClass("dont-print");

} else {

    $("#page").removeClass("dont-print");

}
Run Code Online (Sandbox Code Playgroud)

jquery

3
推荐指数
1
解决办法
241
查看次数