【问题标题】:Porting ASP.NET (Telerik) multi-column combobox to MVC.将 ASP.NET (Telerik) 多列组合框移植到 MVC。
【发布时间】:2011-12-12 16:46:44
【问题描述】:

我需要将此one and only one AJAX control 的功能移植到 MVC,但鉴于 MVC 控件的选择不佳,我认为我需要将此旧控件带入 MVC 世界...

我不想用 ASP.NET 控件污染我的 MVC 项目,并欢迎您知道的 json/MVC 替代方案。 (如果您知道,请发布它们)

我在 ASP.NET MVC 中需要的示例 UI

返回移植

虽然很遗憾我不得不将此控件移植到 MVC,但这似乎是一种被广泛接受的做法,因为 Telerik 在 how do this 上有 detailed instructions

这让我问:

MVC 网站使用 ASP.NET 控件有多普遍?

我再次提到我不想这样做,所以我欢迎特定于 MVC 的替代方案。话虽如此,我将继续尝试将该控件与我现有的站点合并。 </End Disclaimer>

如果你click on this hyperlink,看看底部的源代码,你能告诉我我应该把以下内容放在MVC的什么地方吗?

  1. 后面的代码(我的第一反应是使用控制器,但another SO question 表示我应该创建一个 ViewName.aspx.cs 文件)

  2. 如何将SQLDataSource 移植到新的“模型”思维方式。我知道它们本质上是不同的,但我不知道如何将数据呈现给 ASP.NET 控件以使其使用信息。

  3. 如何处理 AJAX 组件?该控件有一个使用回调的 AJAX 组件。是的,这越来越难看,但似乎我必须这样做。

  4. 显然,此模型将数据保存在会话或视图状态中。我不知道这是否适用于 MVC。非常感谢指导、替代控制或救生员。

我已经完成了研究,并有 instructions from Telerik here and here 描述了如何开始放置一个简单的菜单,但是对于像这样的更复杂的控件,我需要一些帮助。

注意:对于所有遇到这个问题的评论,请记住我只想要这个 ASP.NET 控件功能;我在 MVC 中找不到类似的控件。

【问题讨论】:

  • 为什么有这么多反对票?在 MVC 中重用一个且唯一的 ASP.NET 用户控件是不是一个坏主意?我会感谢任何建设性的反馈,但到目前为止,这并不比我在 www.asp.net/learn 上所做的更具建设性
  • 您正在尝试将不是 MVC 农场标准的东西移植到 ASP.NET MVC 中(使用 SQLDatasource 绑定控件)
  • @KeYan 我知道 SQLDatasource 不是 MVC,但我不明白是否可以将这种类型的控件移植到 MVC。
  • 您可能必须自己创建一些东西来复制控件 - 我怀疑您是否能够“移植”它。您可能可以使用JQuery UI AutoComplete plugin 来实现这一点。

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-2 telerik sqldatasource


【解决方案1】:

从 asp.net webforms 移植到 MVC 是一种范式转变。

直接移植不起作用。

模型是您通常描述数据并进行数据访问的地方
视图用于显示数据
控制器将其他两个组合在一起

所以 SQLDataSource 是您的数据访问层,因此会转到您的模型 SQLDataSource == Model 的思维模式存在问题,那么您就可以摆脱将演示文稿与数据访问脱钩的问题

您必须将 MVC 开发视为一种新构建

我会从你喜欢的来源中挑选一本书或视频系列,然后从 MVC3 开始学习(它有一些不同之处可以简化构建速度并加强 webforms 和 mvc 之间的区别)

【讨论】:

  • 我有点理解这种心理转变,但在我的 MVC 站点中有我需要的旧版 ASP.NET 组件,并且没有替代品。我正在尝试使这个旧的 SQLDataSource 组件与 MVC 一起使用。如何将需要 SQLDatasource 的东西与“模型”思维方式联系起来?
  • Hurricanepkt 是正确的,它是苹果与橙子。您可能应该重新评估从 Web 表单移植到 MVC 的原因。如果最终目标是进行 1:1 转换,那么您就错过了 MVC 的目标。
  • @EdCharbeneau 我的目标从来不是进行 1:1 转换。我只需要移植一个必须出现在每一页上的用户控件(通过主控)。将 MVC 模型伪装成 SQLDatasource 是不可能的吗?
  • 您可以创建一个模型,它是一个 List,其中我的类是出现在您的数据源中的项目。示例:datasource.item 等价于 myclass。
【解决方案2】:

希望这会有所帮助。

【讨论】:

    【解决方案3】:

    在您的 MVC 视图中添加一个仅显示 WebForms 页面的 IFrame(或仅在单个 WebForms 页面上使用该控件)。

    没有什么说您不能拥有一个同时包含 WebForms 和 MVC 页面的站点。您可以仅为此控件将单个 URL 路由到 WebForm。

    【讨论】:

    • 如果你对你的项目有一个限制,说你必须使用这个 WebForms 控件,它引出了一个问题,为什么你在 MVC 中做任何事情?在 WebForms 中进行。如另一个答案中所述,强制 WebForms 控件进入 MVC 模型不是一个好主意,并且显着消除了 MVC 关注点分离的许多好处。当然 Telerik 会告诉你怎么做,因为他们的目标是向尽可能广泛的受众推销他们的控制权,这并不意味着你应该使用它......
    • 对于@Paul T. 引用我的问题:I can't find similar functionality in an MVC control, though I welcome alternatives。同样,欢迎提供建设性反馈。你可能不知道的是,MVC 站点已经完成,而且这个需求是最后一分钟添加的。最后,这种类型的评论最好位于顶部的问题下方,而不是位于其下方的答案中。
    • 对于其他有此问题的人来说,仅创建一个 WebForm 页面的选项可能并不明显,这就是为什么我想将其作为一种可能的解决方案。它可能无法解决您的具体问题,因为您似乎在架构上将自己画到了一个角落,但这并不意味着答案对未来的读者没有用处。
    • 糟糕,我以为你的评论和答案是两个不同的人。我很感激这个建议!
    【解决方案4】:

    为什么不直接使用 Telerik MVC 控件?他们工作得很好。通过 NuGet 包获取它们或访问此链接 http://www.telerik.com/products/aspnet-mvc.aspx

    【讨论】:

    • 感谢 Carlo,我无法找到替代多列下拉组合的替代品,该组合允许在输入时进行搜索
    • 他们甚至有这个样本。非常RAD我会说demos.telerik.com/aspnet-ajax/combobox/examples/functionality/…
    • 这是我要移植到 MVC 的确切 Ajax 控件(也是我在问题中链接的那个)。不知道如何使它在 MVC 中工作
    • @makerofthings7 开始进一步调查您的工作。这确实是一个世界应用程序,过滤突出显示虽然命中并减少了列表,但布局不允许多列。模板化控件有这个限制很奇怪。
    • 如果您知道在 ASP.NET MVC 中做类似事情的方法,也许使用 Jquery,那就太好了。我见过很多类似的控件,但没有任何东西支持下拉列表中的多列
    【解决方案5】:
    1. 我宁愿使用 ViewModel 而不是背后的代码

    2. 您不必丢弃 SqlDataSource,您可以使用结果集并从中构建您的模型,问题可能是结果集中的列名......虽然很棘手,但可以完成

    3. 由于 MVC 中除了 helpers 之外没有其他组件,你可能需要 jQuery 的帮助,这很容易

      $.ajax({ 网址:“/控制器/动作”, data: { /*json 或序列化形式 */ }, 成功:函数(数据){ //如果你从 /controller/action 得到响应为 html $("#some_div").html(数据); } }

    4. Session 在 MVC 中可用,但 viewstate 不可用,如果您需要 viewstate 之类的东西,可以使用 HttpContenxt.Cache 或 TempData。使用 TempData 在重定向之间保留数据,或使用 httpcontext.cache 进一步缓存您的数据。

    【讨论】:

      【解决方案6】:

      我在 MVC 控件中找不到类似的功能

      MVC 并没有像 ASP.Net 那样的控件概念——只有普通的旧 HTML 控件(即隐藏输入、文本输入、复选框、单选按钮、选择框、文本区域、密码和按钮)。

      当您需要比普通 HTML 控件更复杂的东西时,您需要使用一些 JavaScript 来实现。

      我不确定您是否能够将控件“移植”到 MVC 中 - 您很可能必须尝试使用​​ MVC 控制器和带有相当多的部分视图的部分视图自行重新创建它javascript 来创建控件。

      看看JQuery UI Autosomplete plugin - 你可能会用它来实现类似的东西

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-16
        • 2015-06-13
        • 1970-01-01
        相关资源
        最近更新 更多