MVC 5从外部站点发布JSON并返回包含数据的视图

时间:2016-10-19 20:32:44

标签: javascript c# asp.net asp.net-mvc razor

我有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;
//...

同样,我知道这不起作用,原因很明显,但我不知道有任何更好的方法来处理这种情况。有什么想法吗?

1 个答案:

答案 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>