【问题标题】:DNN MVC Template - Is there a good documentation on how to develop modules [closed]DNN MVC 模板 - 是否有关于如何开发模块的良好文档 [关闭]
【发布时间】:2016-09-04 13:51:44
【问题描述】:

从过去 2 天开始,我一直在努力寻找关于如何使用 MVC 框架为 DOTNETNUKE CMS 构建模块的清晰示例文档。

对于这样规模的 CMS 来说,首先宣传他们支持 MVC 的应用程序开发人员,然后几乎可以忽略不计关于如何构建一个非常简单的表单的信息是非常不幸的。

这就是我现在所取得的成就。我正在尝试建立一个基本的联系我们表格:

  1. 设置控制器操作

    // GET: FormEntry Index .. 
    [ModuleAction(ControlKey = "Add", TitleKey = "AddItem")]
    public ActionResult Index()
    {
        return View();
    }
    
    
    
    [HttpPost] // POST: 
    [ActionName("FormEntry")]
    
    public string Post(FormEntry formEntry)
    {
        try
        {
            if (ModelState.IsValid)
            {
                FormEntryManager.Instance.CreateItem(formEntry);
            }
            return "success";
        }
        catch(Exception ex)
        {
            return "error";
        }
    
    }
    
  2. 设置视图。

    <div id="Item-@Dnn.ModuleContext.ModuleId">
    
        <form id="formcontactus">
            @*@Html.ValidationSummary(true)*@
    
            <fieldset>
                <div class="dnnFormItem">
                    <div><label for="itemName">@Dnn.LocalizeString("lblName")</label></div>
                    @Html.TextBoxFor(m => m.VisitorName)
                    @Html.ValidationMessageFor(m => m.VisitorName, @Dnn.LocalizeString("VisitorNameRequired"))
                </div>
                <div class="dnnFormItem">
                    <div><label for="itemDescription">@Dnn.LocalizeString("lblVisitorEmail")</label></div>
                    @Html.TextBoxFor(m => m.VisitorEmail)
                    @Html.ValidationMessageFor(m => m.VisitorEmail, @Dnn.LocalizeString("VisitorEmailRequired"))
                </div>
                <div class="dnnFormItem">
                    <div><label for="itemDescription">@Dnn.LocalizeString("lblPhone")</label></div>
                    @Html.TextBoxFor(m => m.VisitorPhone)
                </div>
                <div class="dnnFormItem">
                    <div><label for="itemDescription">@Dnn.LocalizeString("lblMessage")</label></div>
                    @Html.TextAreaFor(m => m.VisitorMessage)
                    @Html.ValidationMessageFor(m => m.VisitorMessage, @Dnn.LocalizeString("VisitorMessageRequired"))
                </div>
    
                @Html.HiddenFor(m => m.ModuleId)
            </fieldset>
    
            <button id="btnSumbit" type="button" class="dnnPrimaryAction">@Dnn.LocalizeString("Submit")</button>
            <a id="cancelEdit" href="#" class="dnnSecondaryAction">@Dnn.LocalizeString("Cancel")</a>
        </form>
    
    </div>
    

我的索引视图确实渲染成功,我可以看到我的表单。问题在于理解我将这些数据发布到 MVC Post 方法的方式。此外,我的模态类验证数据注释在客户端也不起作用。

我尝试在 Post 方法上通过 jQuery Ajax 发布,但这会引发内部错误。

期待收到 DNN 社区的来信。

【问题讨论】:

  • MVC模块开发的官方文档是dnnsoftware.com/docs/developers/about-modules/…。您还将找到涵盖该主题的博客、社区项目和 DNNHero.com 教程。此外,我的回答中的示例 MVC 项目至少提供了一个工作示例。您对这些资源有进一步了解吗?
  • @DotNetNuclear :感谢您的回复。我将在即将到来的这个周末恢复我的工作。我的观点是,例如我猜有一个 .dnn 文件用于路由而不是 RouteConfig.cs(与 asp.net MVC 相反)。这是在哪里解释的?验证将如何在客户端和服务器端工作?用于验证的模态类上的数据注释如何与客户端验证相关联?我是一名 Android 开发人员 + 一名网络开发人员。我在其他框架中看到了非常成熟的文档,但没有看到 DNN

标签: asp.net-mvc dotnetnuke-7 dotnetnuke-8


【解决方案1】:

我的Restaurant Menu MVC project 是一个不错的 DNN8 MVC 模块示例项目,您可以从 github 下载。

我的编辑视图和控制器有表单字段,您可以签出带有有效验证的表单字段。

确保单击提交按钮时,它正在进入您的控制器方法(我假设该视图根据您的操作方法称为 FormEntry?)。

此外,处理帖子的操作方法应返回操作结果,而不是字符串。

在我的 post 处理程序中,如果 ModelState.IsValid 为真,我会在持久化表单数据后返回一个 RedirectToRouteResult,否则我将返回具有相同模型的当前视图,这将触发验证。

[HttpPost]
[DotNetNuke.Web.Mvc.Framework.ActionFilters.ValidateAntiForgeryToken]
public ActionResult Edit(MenuItem item)
{
    if (ModelState.IsValid)
    {
        //Persist form information

        //Go to default view (Index)
        return RedirectToDefaultRoute();
    }

    // Return to my edit view if there was an error.
    return View(item);
}

【讨论】:

    猜你喜欢
    • 2023-04-03
    • 1970-01-01
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    相关资源
    最近更新 更多