我正在看MvcContrib网格组件,我很着迷,但同时被网格语法中使用的语法技巧击退:
.Attributes(style => "width:100%")
Run Code Online (Sandbox Code Playgroud)
上面的语法将生成的HTML的style属性设置为width:100%.现在如果你注意,"风格"没有指定,是从表达式中参数的名称推断出来的!我不得不深入研究这个并发现"神奇"发生的地方:
Hash(params Func<object, TValue>[] hash)
{
foreach (var func in hash)
{
Add(func.Method.GetParameters()[0].Name, func(null));
}
}
Run Code Online (Sandbox Code Playgroud)
实际上,代码使用正式的编译时,参数名来创建属性名称 - 值对的字典.结果语法结构确实非常具有表现力,但同时也非常危险.lambda表达式的一般用法允许替换使用的名称而没有副作用.我在一本书中看到一个例子,说collection.ForEach(book => Fire.Burn(book))我知道我可以用我的代码编写collection.ForEach(log => Fire.Burn(log)),这意味着同样的事情.但是使用MvcContrib网格语法突然间,我发现代码主动查找并根据我为变量选择的名称进行分解!
这是C#3.5/4.0社区和lambda表达爱好者的常见做法吗?或者是一个我不应该担心的流氓一招特立独行?
假设我有ViewModel之类的
public class AnotherViewModel
{
public string Name { get; set; }
}
public class MyViewModel
{
public string Name { get; set; }
public AnotherViewModel Child { get; set; }
public AnotherViewModel Child2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在视图中,我可以渲染部分
<% Html.RenderPartial("AnotherViewModelControl", Model.Child) %>
Run Code Online (Sandbox Code Playgroud)
在部分我会做
<%= Html.TextBox("Name", Model.Name) %>
or
<%= Html.TextBoxFor(x => x.Name) %>
Run Code Online (Sandbox Code Playgroud)
但是,问题是两者都将呈现name ="Name",而我需要name ="Child.Name"才能使模型绑定器正常工作.或者,当我使用相同的局部视图渲染第二个属性时,name ="Child2.Name".
如何使我的局部视图自动识别所需的前缀?我可以将它作为参数传递,但这太不方便了.当我想要例如以递归方式呈现它时,情况会更糟.有没有办法用前缀渲染部分视图,或者更好的是,通过自动重新调用lambda表达式来实现
<% Html.RenderPartial("AnotherViewModelControl", Model.Child) %>
Run Code Online (Sandbox Code Playgroud)
会自动添加正确的"孩子".生成的名称/ id字符串的前缀?
我可以接受任何解决方案,包括第三方视图引擎和库 - 我实际上使用Spark View引擎(我使用它的"解决"问题)和MvcContrib,但没有在那里找到解决方案.XForms,InputBuilder,MVC v2 - 提供此功能的任何工具/洞察都会很棒.
目前我考虑自己编码,但这似乎是浪费时间,我不敢相信这些琐碎的东西还没有实现.
可能存在许多手动解决方案,欢迎所有这些解决方案.例如,我可以强制我的部分基于IPartialViewModel <T> {public string Prefix; T模型; …
有没有人对asp.net mvc 3中的多项目区域支持有任何想法?因为它在mvc 2中降级为未来状态.如果它仍未包括在内,那么我们是否应该通过MvcContrib期待ASP.Net MVC Portable Areas.你可以分享你的经历吗?
管理大型应用程序的推荐方法是什么?我读到了MEF.在什么情况下建议使用MEF?
asp.net-mvc visual-studio-2010 mvccontrib asp.net-mvc-3 asp.net-mvc-2
由于我现在决定让RC继续使用Beta,我无法知道是否RedirectToAction添加了强类型.是否有人尝试过它并且在RC中是否存在强类型RedirectToAction(也许ActionLink)?
首先,对于大帖子(我先尝试做一些研究)和同一问题的混合技术(ASP.NET MVC 3,Ninject和MvcContrib),我感到很遗憾.
我正在使用ASP.NET MVC 3开发一个项目来处理一些客户端订单.
简而言之:我有一些继承自和抽象类的对象,Order当我向控制器发出POST请求时,我需要解析它们.我该如何解决正确的类型?我是否需要覆盖DefaultModelBinder该类,或者还有其他方法可以执行此操作?有人可以提供一些代码或其他链接,如何做到这一点?任何帮助都会很棒!如果帖子令人困惑,我可以做任何改变以表明清楚!
所以,对于我需要处理的订单,我有以下继承树:
public abstract partial class Order {
public Int32 OrderTypeId {get; set; }
/* rest of the implementation ommited */
}
public class OrderBottling : Order { /* implementation ommited */ }
public class OrderFinishing : Order { /* implementation ommited */ }
Run Code Online (Sandbox Code Playgroud)
这些类都是由Entity Framework生成的,所以我不会修改它们,因为我需要更新模型(我知道我可以扩展它们).此外,会有更多的订单,但都来自Order.
我有一个通用的view(Create.aspx)来创建一个订单,这个视图为每个继承的订单调用一个强类型的局部视图(在这种情况下OrderBottling和OrderFinishing).我Create()为OrderController类上的POST请求定义了一个GET请求的方法和其他方法.第二个是如下:
public class OrderController : Controller
{
/* rest of the …Run Code Online (Sandbox Code Playgroud) 我试图使用ASP.NET MVC 3和razor视图的可移植视图,因为这似乎是创建一个简单的插件架构的最佳方式.所以我有我的类库设置,我的视图位于/Views/Admin/Index.cshtml中,它被设置为嵌入式资源.然后,我将该项目作为主Web应用程序项目的依赖项.当我尝试访问管理控制器时,我会收到一条无法找到该视图文件的消息(因此正确地包含了控制器).我假设它正在尝试查看主Web应用程序项目而不是可移植区域二进制文件.有没有办法让剃刀视图与便携式区域一起使用?
我有以下问题:我在最重要的功能中工作的系统之一是搜索页面.在这个页面中,我有一些选项,如每页记录,开始日期,结束日期和有问题的一个:类型.必须有可能选择多种类型(大多数时候,所有这些都将被选中).为了完成这项工作,我创建了以下内容:
<div>
<label>Eventos:</label>
<div>
@Html.ListBox("events", Model.Events, new { style = "width: 100%" })
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
它创建了一个列表框,我可以在其中选择多个选项,当表单被提交时,我的查询字符串将如下所示:
/ 10?周期= 9&事件= 1&事件= 3&recordsPerPage = 10
在那里可以看到创建了两个事件(这是我以前说过的类型).此页面的操作方法将其List<long>作为其参数之一,表示两个events值.当我想在MVC Contrib中使用它时,问题就开始了.他们的寻呼机工作得很好,但正如我的要求,我创建了另一个寻呼机,它显示了用户所在之前和之前五页的链接.为此,在我的代码的一部分中,我必须执行以下操作(这与MVC Contrib寻呼机非常相似,有效):
public RouteValueDictionary GetRoute(int page)
{
var routeValues = new RouteValueDictionary();
foreach (var key in Context.Request.QueryString.AllKeys.Where(key => key != null))
{
routeValues[key] = Context.Request.QueryString[key];
}
routeValues["page"] = page;
return routeValues;
}
Run Code Online (Sandbox Code Playgroud)
然后:
@Html.ActionLink(page.ToString(), action, controller, GetRoute(page), null)
Run Code Online (Sandbox Code Playgroud)
问题是它是一个字典,它第二次设置routeValues["events"]擦除前一个的值.
你们对如何使用它有什么想法吗?
我刚开始在测试项目中使用MVCContrib网格.我很难找到有关如何使用它进行编辑/更新/删除的信息.
任何人都可以向我指出如何将行放入编辑模式的信息,或者如果该网格没有这样的东西,请讨论在MVC中编辑列表数据的最佳实践.
我在asp.net mvc(C#)应用程序中使用mvccontrib网格.
如何将css类应用于为mvccontrib网格属性创建的网格?
我希望构建如下:
<table border="0" cellspacing="0" class="usertable">....</table>
Run Code Online (Sandbox Code Playgroud)
默认情况下,mvccontrib网格具有"grid"类.我需要将它更改为我的自定义css类
MVCContrib目前是否支持MVC4?我首先看一下将项目从MVC2切换到MVC4并且在Portable Areas方面遇到了一些问题.
mvccontrib ×10
asp.net-mvc ×6
c# ×3
dictionary ×1
grid ×1
inheritance ×1
lambda ×1
ninject-2 ×1
razor ×1