5

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())
                }
            };
        }
    }

しかし、送信ボタンをクリックすると、投稿しようとします

OrchardLocal / Contents / Email / Send

そして明らかに失敗します。誰かが私が間違っていることの方向に私を向けることができますか?

4

1 に答える 1

9

これを試して:

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

エリアの追加は、モジュールのみが一致するコントローラー/アクションメソッドのペアを検索することを保証する追加の句のようなものです。

于 2012-11-12T09:37:46.310 に答える