Umbraco在后台无法找到路线 [英] Umbraco cannot find the route in backoffice
问题描述
我在项目中使用了Umbraco 7.3.我创建了一个自定义数据类型,但是当我想在这里调用HelloSurfaceController
或Hello2SurfaceController
时,在umbraco后台出现错误,提示Request error: The URL returned a 404 (not found):
I've used Umbraco 7.3 in my project. I created a custom data type but when I want to call a Surfacecontroller
in here is HelloSurfaceController
or Hello2SurfaceController
, I got an error in umbraco backoffice that said Request error: The URL returned a 404 (not found):
我研究了一些有关路由的文章,但无法解决我的问题.我不知道我做错了什么地方.
I studied some articles about routing but I couldn't solve my problem. I don't know that where I did wrong.
我该如何解决这个问题?
How can I solve this problem?
Reply.controller.js:
Reply.controller.js:
angular.module("umbraco")
.controller("Reply.controller", function ($scope, $http) {
$scope.SendReply = function () {
var sendTo = $("#Email").val();
var textMessage = $("#TextMessage").val();
$scope.xxx = "I'm here!";
var data = { SendTo: sendTo, TextMessage: textMessage };
// ~/Hello2Surface/ReplyMessage ---> Cannot find this URL
$http.post("~/App_Plugins/Reply/HelloSurface/ReplyMessage") // Can not find this URL
.then(function (response) {
alert("YES!");
//TODO:
});
}
});
SurfaceController
SurfaceController
namespace Jahan.Nuts.Web.Mvc.UmbracoCms.App.App_Plugins.Reply
{
public class HelloSurfaceController : SurfaceController
{
[HttpPost][ChildActionOnly]
public ActionResult ReplyMessage()
{
//TODO: how should be write this method that be proper for getting data from angularjs?
return null;
}
}
}
package.manifest
package.manifest
{
propertyEditors: [
{
alias: "Send.Reply",
name: "Send Reply",
editor:{
view:"~/App_Plugins/Reply/Reply.html"
},
}
]
,
javascript:[
'~/App_Plugins/Reply/Reply.controller.js'
]
}
Reply.html
Reply.html
<div ng-controller="Reply.controller">
<div style="width: 100%;">
<input type="button" value="Send Reply" title="SendReply" name="Send Reply" ng-click="SendReply()" />
</div>
<div>
<input type="text" ng-model="xxx" name="message" />
</div>
umbraco后台的错误:
Error in umbraco backoffice:
推荐答案
从URL中删除表面"并包含后台":
remove the "Surface" from the URL and include "backoffice":
angular.module("umbraco")
.controller("Reply.controller", function ($scope, $http) {
$scope.SendReply = function () {
var sendTo = $("#Email").val();
var textMessage = $("#TextMessage").val();
$scope.xxx = "I'm here!";
var data = { SendTo: sendTo, TextMessage: textMessage };
// ~/Hello2Surface/ReplyMessage ---> Cannot find this URL
$http.post("backoffice/Reply/Hello/ReplyMessage") // Can not find this URL
.then(function (response) {
alert("YES!");
//TODO:
});
}
});
此外,我建议您使用UmbracoAuthorizedController而不是表面控制器,因为登录用户正在后端使用它,这是明智的做法,以确保其安全.
Also, I'd recommend using UmbracoAuthorizedController not a surface controller as this is being used in the back end by logged in users it'll be wise to keep it secure.
因此,您的控制器应该看起来像这样:
So instead your controller should look something like this:
[PluginController("Reply")]
namespace Jahan.Nuts.Web.Mvc.UmbracoCms.App.App_Plugins.Reply
{
public class HelloApiController : UmbracoAuthorizedJsonController
{
public [Model-to-be-returned-to-angular] ReplyMessage()
{
//sql query etc to populate model
//return model
}
}
}
这篇关于Umbraco在后台无法找到路线的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!