鉴于以下类,您对处理创建/编辑的最佳方法有何看法,其中Attributes.Count可以是任何数字.
public class Product {
public int Id {get;set;}
public string Name {get;set;}
public IList<Attribute> Attributes {get;set;}
}
public class Attribute {
public string Name {get;set;}
public string Value {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
用户应该能够在同一视图中编辑产品详细信息(名称)和属性详细信息(名称/值),包括添加和删除新属性.
处理模型中的更改很容易,处理UI和ActionMethod方面的最佳方法是什么?
我有一个表格,表格代表员工的时间表.顶部的天数,项目的侧面,每天/项目交叉点包含常规小时和加班的两个值.
页面模型的(简化)类定义是:
public class TimesheetFormModel {
public List<Project> Projects;
// other things...
}
public class Project {
public string Name;
public List<WorkUnit> WorkUnits;
}
public class WorkUnit {
public DateTime Date;
public decimal RegularHours;
public decimal OvertimeHours;
}
Run Code Online (Sandbox Code Playgroud)
页面上的表单元素如下命名,试图让DefaultModelBinder获取它们.
model.Projects[0].Name // "New Project"
model.Projects[0].WorkUnits[0].Date // "5/23/2009 12:00:00 AM"
model.Projects[0].WorkUnits[0].RegularHours // 0
model.Projects[0].WorkUnits[0].OvertimeHours // 0
model.Projects[0].WorkUnits[1].Date // "5/24/2009 12:00:00 AM"
model.Projects[0].WorkUnits[1].RegularHours // 0
model.Projects[0].WorkUnits[1].OvertimeHours // 0
model.Projects[0].WorkUnits[2].Date // "5/25/2009 12:00:00 AM"
model.Projects[0].WorkUnits[2].RegularHours // 0
model.Projects[0].WorkUnits[2].OvertimeHours // 0
// etc.
Run Code Online (Sandbox Code Playgroud)
但是,提交视图时,model …
我需要从我的数据访问层检索一组Widgets,按widget.Manufacturer分组,以显示在一组嵌套的ASP.NET ListViews中.
问题是(据我所知)嵌套的ListView方法要求我在使用之前对数据进行整形,我无法找出最佳方法.到目前为止,我能够提出的最好的方法是在我的数据访问层中放置一个LINQ查询,如下所示:
var result = from widget in GetAllWidgets(int widgetTypeID)
group widget by widget.Manufacturer into groupedWidgets
let widgets = from widgetGroup in groupedWidgets
select widgetGroup
select new { Manufacturer = groupedWidgets.Key, Widgets = widgets };
Run Code Online (Sandbox Code Playgroud)
当然,匿名类型不能传递,因此不起作用.定义一个自定义类来封装数据似乎是错误的方法.有没有什么方法可以在ASP.NET方面执行分组?我正在使用ObjectDataSources来访问DAL.
更新:好的,我不再创建匿名类型,而是我的DAL传递IEnumerable<IGrouping<Manufacturer, Widget>>
给ASP.NET页面,但是如何在ListViews中使用它?我需要渲染以下HTML(或者非常类似的东西)
<ul>
<li>Foo Corp.
<ol>
<li>Baz</li>
<li>Quux</li>
</ol>
</li>
<li>Bar Corp.
<ol>
<li>Thinger</li>
<li>Whatsit</li>
</ol>
</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
最初,我在ListView中有一个ListView,如下所示:
<asp:ListView ID="ManufacturerListView">
<LayoutTemplate>
<ul>
<asp:Placeholder ID="itemPlaceholder" runat="server" />
</ul>
</LayoutTemplate>
<ItemTemplate>
<li><asp:Label Text='<%# Eval("Manufacturer.Name") %>' />
<li>
<asp:ListView ID="WidgetsListView" runat="server" DataSource='<%# …
Run Code Online (Sandbox Code Playgroud) 我的Web应用程序中的视图有一个可能非常长的表,因此我将其包装在div中,overflow: auto; max-height: 400px;
以便用户可以滚动浏览它,同时保持页面上的其他控件可见.
我想使用一些JavaScript动态调整max-height
CSS属性,以便div延伸到浏览器窗口的底部.我该如何确定这个值?jQuery解决方案很好.
该表不会从页面顶部开始,因此我不能将高度设置为100%.
我有一个通用的Repository <T>类,我想与ObjectDataSource一起使用.存储库<T>位于名为DataAccess的单独项目中.根据MS新闻组的这篇文章(相关部分复制如下):
在内部,ObjectDataSource正在调用Type.GetType(string)来获取类型,因此我们需要遵循Type.GetType中记录的指南,了解如何使用泛型获取类型.您可以在Type.GetType上引用MSDN Library:
http://msdn2.microsoft.com/en-us/library/w3f99sx1.aspx
从文档中,您将了解到需要使用反引号(`)来表示使用泛型的类型名称.
此外,这里我们必须在类型名称字符串中指定程序集名称.
因此,对于您的问题,答案是使用类型名称,如下所示:
类型名= "TestObjectDataSourceAssembly.MyDataHandler`1 [System.String],TestObjectDataSourceAssembly"
好的,有道理.但是,当我尝试它时,该页面会抛出异常:
<asp:ObjectDataSource ID="MyDataSource" TypeName="MyProject.Repository`1[MyProject.MessageCategory],DataAccess" />
Run Code Online (Sandbox Code Playgroud)
[InvalidOperationException:找不到ObjectDataSource'MyDataSource'的TypeName属性中指定的类型.
奇怪的是,这只发生在我查看页面时.当我从VS2008设计器打开"配置数据源"对话框时,它正确地向我显示了我的通用Repository类的方法.调试时将TypeName字符串传递给Type.GetType()也会返回有效类型.什么给出了什么?
如何检测浏览器是否支持CSS属性显示:inline-block?
我正在尝试编写一个自定义模型绑定器,但我很难设法如何绑定复杂的复合对象.
这是我想要绑定的类:
public class Fund
{
public int Id { get; set; }
public string Name { get; set; }
public List<FundAllocation> FundAllocations { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这就是我尝试编写自定义绑定器的方式:
public class FundModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
throw new NotImplementedException();
}
public object GetValue(ControllerContext controllerContext, string modelName, Type modelType, ModelStateDictionary modelState)
{
var fund = new Fund();
fund.Id = int.Parse(controllerContext.HttpContext.Request.Form["Id"]);
fund.Name = controllerContext.HttpContext.Request.Form["Name"];
//i don't know how to bind to the list property :(
fund.FundItems[0].Catalogue.Id …
Run Code Online (Sandbox Code Playgroud) 是否可以使用单个PrincipalSearcher调用搜索多个用户名.也许通过提供所请求的用户名的"OR"作为过滤器标准?
我想在ASP.NET MVC 2中使用强类型HTML帮助程序,使用我的模型的属性Nullable<T>
.
public class TicketFilter {
public bool? IsOpen { get; set; }
public TicketType? Type{ get; set; } // TicketType is an enum
// ... etc ...
}
Run Code Online (Sandbox Code Playgroud)
<p>Ticket status:
<%: Html.RadioButtonFor(m => m.IsOpen, null) %> All
<%: Html.RadioButtonFor(m => m.IsOpen, true) %> Open
<%: Html.RadioButtonFor(m => m.IsOpen, false) %> Closed
</p>
<p>Ticket type:
<%: Html.RadioButtonFor(m => m.Type, null) %> Any
<%: Html.RadioButtonFor(m => m.Type, TicketType.Question) %> Question
<%: Html.RadioButtonFor(m => m.Type, TicketType.Complaint) %> …
Run Code Online (Sandbox Code Playgroud) 为了试图干掉我的单元测试,我试图使用AutoFixture作为IoC容器来实例化我的被测系统(SUT),在这种特殊情况下是ASP.NET MVC Controller
.因此,我想自定义AutoFixture以创建没有自动属性的控制器.
我尝试添加自定义ControllerBase
,但它似乎不适用于子类ControllerBase
.
fixture.Customize<ControllerBase>(c => c.OmitAutoProperties());
Run Code Online (Sandbox Code Playgroud)
这是我希望能够编写的测试示例:
[Theory, AutoFixtureData]
public void ControllerTest(AccountController controller) {
Assert.Equal(default(UrlHelper), controller.Url);
}
Run Code Online (Sandbox Code Playgroud)
当然,如果我为项目中的每个特定控制器手动添加一个自定义,但是谁想要这样做呢?有没有更好的办法?
asp.net-mvc ×4
asp.net ×3
javascript ×2
autofixture ×1
c# ×1
collections ×1
css ×1
dimensions ×1
generics ×1
html-helper ×1
jquery ×1
linq ×1
listview ×1
modelbinders ×1
nullable ×1
positioning ×1
unit-testing ×1