在路由果园CMS定制控制器 [英] Routing a custom controller in Orchard CMS

查看:159
本文介绍了在路由果园CMS定制控制器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一些麻烦的路由设置在果园定制控制器。

I'm having some trouble setting up the routing to a custom controller in Orchard.

我创建了一个视图:

@model dynamic
@{
    Script.Require("jQuery");
}
@using (Html.BeginForm("Send", "Email", FormMethod.Post, new { id = "contactUsForm" }))
{
    <fieldset>
        <legend>Contact Us</legend>
        <div class="editor-label">Name:</div>
        <div class="editor-field">
            @Html.TextBox("Name", "", new {style = "width: 200px"})
        </div>
        <div class="editor-label">Email Address:</div>
        <div class="editor-field">
            @Html.TextBox("Email", "", new {style = "width: 200px"})
        </div>
        <div class="editor-label">Telephone Number:</div>
        <div class="editor-field">
            @Html.TextBox("Telephone", "", new {style = "width: 200px"})
        </div>
        <div class="editor-label">Message:</div>
        <div class="editor-field">
            @Html.TextArea("Message", "", new {style = "width: 200px"})
        </div>
        <br/>
        <input id="ContactUsSend" type="button" value="Submit" />
    </fieldset>
}
@using (Script.Foot()) {
    <script>
        $(function() {
            $('#ContactUsSend').click(function () {
                alert('@Url.Action("Send", "Email")');
                var formData = $("#contactUsForm").serializeArray();

                $.ajax({
                    type: "POST",
                    url: '@Url.Action("Send", "Email")',
                    data: formData,
                    dataType: "json",
                    success: function (data) {
                        alert(data);
                    }
                });
            });
        });
    </script>
}

与控制器:

public class EmailController : Controller
    {
        [HttpPost]
        public ActionResult Send()
        {
            var orchardServices = DependencyResolver.Current.GetService<IOrchardServices>();
            var messageHandler = DependencyResolver.Current.GetService<IMessageManager>();
            var svc = new ContactUsService(orchardServices, messageHandler);
            svc.DoSomething();
            return new EmptyResult();
        } 
    }

和设置的路线:

public class Routes : IRouteProvider {
        public void GetRoutes(ICollection<RouteDescriptor> routes) {
            foreach (var routeDescriptor in GetRoutes()) {
                routes.Add(routeDescriptor);
            }
        }

        public IEnumerable<RouteDescriptor> GetRoutes() {
            return new[] {
                new RouteDescriptor {
                    Priority = 15,
                    Route = new Route(
                        "ContactUsWidget",
                        new RouteValueDictionary {
                            {"area", "ContactUsWidget"},
                            {"controller", "Email"},
                            {"action", "Send"}
                        },
                        new RouteValueDictionary(),
                        new RouteValueDictionary {
                            {"area", "ContactUsWidget"}
                        },
                        new MvcRouteHandler())
                }
            };
        }
    }

但是,当我点击提交按钮,它会尝试张贴到

But when I click the submit button, it tries to post to

OrchardLocal /内容/电子邮件/发送

OrchardLocal/Contents/Email/Send

和明显的失败。任何人都可以点我的,我做错了什么方向?

and obviously fails. Can anyone point me in the direction of what I'm doing wrong?

推荐答案

试试这个:

@using (Html.BeginForm("Send", "Email", new { area = "Your.Module" }, FormMethod.Post, new { id = "contactUsForm" }))

添加区域就像是确保只有被搜索匹配的控制器/操作方法对您的模块一个额外的条款。

Adding the area is like an extra clause that ensures only your module is searched for a matching controller/action method pair.

这篇关于在路由果园CMS定制控制器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆