【问题标题】:MVC 5 post JSON from an external site and return view with dataMVC 5 从外部站点发布 JSON 并返回带有数据的视图
【发布时间】:2016-10-19 20:32:44
【问题描述】:

我有 2 个站点(同一个域),使用 2 个单独的 Web 应用程序。我希望能够拥有从一个站点到另一个站点的链接。该链接会将大量数据发送到其他应用程序,因此我需要使用 POST,以便其他应用程序可以使用和处理这些数据。

所以想法是在 domain.com/site1 上使用 AJAX 调用并发布数据,这将在 domain.com/site2 上启动一个视图,该视图将可以通过 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 发布到站点 2。但是,可以将此要求细化为其他架构/解决方案,例如 Web 服务或 API 调用。仔细考虑并将您的要求简化为最简单的要求,您将得到答案。并且不要使用 iframe。

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


【解决方案1】:

我认为这也行不通,但我还没有尝试过,所以我真的不知道您是否可以从其他项目返回 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);
}

然后在项目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>

【讨论】:

    猜你喜欢
    • 2017-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多