我有2个站点(相同的域名),使用2个独立的Web应用程序。我希望能够从一个站点到另一个站点的链接。该链接将向其他应用程序发送大量数据,因此我需要使用POST,以便其他应用程序可以使用和处理此数据。
因此,我们的想法是在domain.com/site1上使用AJAX调用,以及在domain.com/site2上启动视图的POST数据,这些视图可以通过JavaScript访问所述数据。
我以为我能够将数据发布到控制器并返回带有所述数据的剃刀视图。
这样的东西(虽然我知道这样做会因为Controller!= ApiController而起作用):
public class Site2Controller : Controller
{
[HttpPost]
public ActionResult Index([FromBody]Dictionary<string, dynamic> postedData)
{
var model = new Site2DataModel();
model.someParam = postedData.someParam;
return View(model);
}
}
然后在我看来(让我知道这是否愚蠢):
@model Site2.Site2DataModel
@{
Layout = "~/Views/Site2View.cshtml";
}
<form class="dataForm">
<input type="hidden" name="someParam" value="@Model.someParam"/>
</form>
在我的JS中,类似于:
var viewData: any = $('.dataForm').serializeArray().reduce(function (obj, item) {
obj[item.name] = item.value;
return obj;
}, {});
var viewModel = viewData.someParam;
//...
同样,我知道这不起作用,原因很明显,但我不知道有任何更好的方法来处理这种情况。有什么想法吗?
答案 0 :(得分:0)
我不认为这也会有效但我还没有尝试过,所以我真的不知道你是否可以从另一个项目返回一个ActionResult / View。
至于我所做的工作不是返回一个ActionResult / View我返回一个JsonResult / JSON然后通过另一个项目中的ajax调用它。
你拥有的项目1。
控制器:
[HttpPost]
public JsonResult Proj1Action(YourModelHere somedata)
{
//some data modification here
...
SomeModel modifiedModelData = new SomeModel
{
name = "testname"
}
return JSON(modifiedModelData);
}
然后在Project 2中执行ajax:
<script>
$.ajax({
method: "POST",
url: "http://Project1/Project1Controller/Proj1Action",
data: {somedata: dataYouWantToPass},
dataType: 'json',
success: function(result){
//result is the modifiedModelData that you got from Proj1Action
console.log(result.name);
},
error: function(xhr){
console.log(xhr);
}
})
</script>