如何在dnn中填充dropdown fom数据库

时间:2015-04-29 10:00:33

标签: dotnetnuke

我想在DNN网站中添加新页面,该网站从数据库中填充两个国家/地区下拉列表。

请建议我们如何做到这一点?

3 个答案:

答案 0 :(得分:0)

在这里,我将向您展示如何使用DNN模块创建动态页面。有关更多信息,请参阅this link

  1. 首先在Visual Studio中打开您的DNN网站。您可以在根目录中看到 DesktopModules 文件夹,右键单击该目录并添加新目录,将其命名为模块名称,例如“CountryState”。现在右键单击 CountryState 文件夹并添加 - >添加新项目 - >选择 Web用户控件并将其命名为模块名称,如“CountryState.ascx” “,它将在DesktopModules / CountryState文件夹中显示CountryState.ascx和CountryState.ascx.cs文件。
  2. 将继承类“System.Web.UI.UserControl”更新为“PortalModuleBase”的下一步。这是因为PortalModuleBase类定义了Portal中所有桌面门户模块继承的自定义基类。 PortalModuleBase类定义门户网站框架用于正确显示门户网站模块的门户网站特定属性。
  3. 现在使用您的主机凭据登录您的网站。
  4. 在DNN面板中,转到主持人 - >扩展程序。
  5. 点击“扩展程序页面”右上角的创建新模块按钮。
  6. 创建新模块按钮打开一个带有创建模块表单 DropDownList的弹出窗口。从该下拉菜单中选择控制
  7. 它将显示表单,从中选择您的.ascx Web用户控件作为尊重的文件夹路径,然后单击创建模块按钮。
  8. 最后将Drag-N-Drop模块放在您的页面上。
  9. 享受! ;)

答案 1 :(得分:0)

我有一篇博客文章,其中包含有关如何在DNN中完成此操作的代码示例。

CASCADING COUNTRY / STATE DROPDOWNS: A STUDY IN DOTNETNUKE 7 WEBAPI SERVICES AND AJAX

答案 2 :(得分:0)

Keval的解决方案可以快速而肮脏的解决方案,但对于更具可持续性的东西,我更喜欢将我的模块保留在除DNN之外的自己的解决方案中。然后,我使用project post build events将所需的代码复制到bin和desktop模块文件夹。这使源控制更容易,并且更快地打开解决方案。

不同文件扩展名的构建脚本

xcopy "$(ProjectDir)*.ascx" C:\Webs\Properteez\DesktopModules\$(ProjectName)\*.ascx   /S /C /Y /D
xcopy "$(ProjectDir)*.css" C:\Webs\Properteez\DesktopModules\$(ProjectName)\*.css   /S /C /Y /D
xcopy "$(ProjectDir)*.txt" C:\Webs\Properteez\DesktopModules\$(ProjectName)\*.txt   /S /C /Y /D
xcopy "$(ProjectDir)App_LocalResources\*.resx" C:\Webs\Properteez\DesktopModules\$(ProjectName)\App_LocalResources\*.resx   /S /C /Y /D
xcopy "$(ProjectDir)Styles\*.css" C:\Webs\Properteez\DesktopModules\$(ProjectName)\Styles\*.css   /S /C /Y /D
xcopy "$(ProjectDir)Scripts\*.js" C:\Webs\Properteez\DesktopModules\$(ProjectName)\Scripts\*.js   /S /C /Y /D
xcopy "$(ProjectDir)Images\*.*" C:\Webs\Properteez\DesktopModules\$(ProjectName)\Images\*.*   /S /C /Y /D
xcopy "$(TargetDir)$(TargetFileName)" C:\Webs\Properteez\bin   /C /Y /Q /D

此外,

  

从数据库中填充国家和州的两个下拉列表

与DB通信可以通过" DNN方式"与PetaPoco合作。

模型示例(这需要直接映射到您的数据库表):

#region Usings

using System;
using DotNetNuke.ComponentModel.DataAnnotations;
using DotNetNuke.Common.Utilities;

#endregion

namespace Properteez.Data.Entities
{
    [TableName("Sync_Property")]
    [PrimaryKey("PropertyId", "PropertyId")]
    public class Property
    {
        #region Properties

        public int PropertyId { get; set; }
        public string Name { get; set; }
        public string ShortDesc { get; set; }
        public int UserId { get; set; }
        public bool IsDeleted { get; set; }
// You can use the [IgnoreColumn] attribute if a property does not map to a DB field
    }
}

存储库方法示例:

    public static Property Get(int id)
    {
        Property item;
        using (IDataContext ctx = DataContext.Instance())
        {
            var rep = ctx.GetRepository<Property>();
            item = rep.GetById(id);
        }
        return item;
    }

    public static List<Property> GetAllSinceLastSync(DateTime lastSyncDate)
    {
        List<Property> items;
        using (IDataContext ctx = DataContext.Instance())
        {
            var rep = ctx.GetRepository<Property>();
            items = rep.Get()
                // Filter list to valid properteez that have been added or changed since last sync
                .Where(p => (!p.IsDeleted && !p.IsSold) && p.LastModifiedOnDate >= lastSyncDate)
                .ToList();
        }
        return items;
    }

    public static List<Property> GetAll()
    {
        List<Property> items;
        using (IDataContext ctx = DataContext.Instance())
        {
            var rep = ctx.GetRepository<Property>();
            items = rep.Get().ToList();
        }
        return items;
    }

    public static int Create(Property item)
    {
        item.CreatedOnDate = DateTime.Now;
        item.LastModifiedOnDate = DateTime.Now;

        using (IDataContext ctx = DataContext.Instance())
        {
            var rep = ctx.GetRepository<Property>();
            rep.Insert(item);
        }
        return item.PropertyId;
    }

    public static void Update(Property item)
    {
        item.LastModifiedOnDate = DateTime.Now;

        using (IDataContext ctx = DataContext.Instance())
        {
            var rep = ctx.GetRepository<Property>();
            rep.Update(item);
        }
    }

    public static void Delete(Property item)
    {
        using (IDataContext ctx = DataContext.Instance())
        {
            var rep = ctx.GetRepository<Property>();
            rep.Delete(item);
        }
    }

<强>调试

您可以通过构建(将.dlls复制到DNN实例的bin文件夹)来调试应用程序,转到Debug&gt; Attach to process并选择&#34; W3wp&#34;过程

注意,您需要以管理员身份运行Visual Studio。