【问题标题】:Failed to load resource: the server responded with a status of 500 (Internal Server Error) MVC JAVASCRIPT加载资源失败:服务器响应状态为 500(内部服务器错误)MVC JAVASCRIPT
【发布时间】:2015-11-01 21:28:11
【问题描述】:

我正在尝试将 2 参数从带有 JavaScript 的视图发布到 Controler,但我收到此错误。不知道为什么。。 Failed to load resource: the server responded with a status of 500 (Internal Server Error)

transfer.js $(document).ready(function () { $("#transferPlayerButton").click(function () {

    var playerId = document.getElementById("id_player").value;
    var teamId = document.getElementById("id_team").value;

    $.ajax({
        type: 'post',
        url: '/Player/TransferPlayer',
        data:
            {
                playerId: playerId,
                newTeamId: teamId
            },
        contentType: 'application/json;charset=utf-8',
        dataType: 'json',
        success: function (data) {
            alert("Success!");
        }


    });

});

});

控制器

    [HttpPost]
    public ActionResult TransferPlayer(int playerId, int newTeamId)
    {
        return Content(string.Format("Player {0} it is now at team {1}.", playerId, newTeamId)); 
    }

这是我的观点。我已将对象映射到数据库 obj,但我无法弄清楚为什么我会收到此 500 错误。需要一些帮助。我是 mvc/javascript 的新手

  @model FotballTeamsProject.Models.PlayerModels.PlayerTransferModel


    <script src="@Url.Content("~/Scripts/Player/Transfer.js")"></script>
    <script type="text/javascript">
    var transferUrl= "@Url.Action("TransferPlayer", "Player")";
    </script>
    <table>
    <thead>
    <tr>
        <th>ID</th>
        <th>Nume</th>
        <th>Prenume</th>
        <th></th>
        <th>Skill</th>
        <th>Valoare</th>
        <th></th>
        <th>Echipa Actuala</th>
        <th style="margin-right: 10px;">Echipa Viitoare</th>

    </tr>
</thead>
<tbody>

        <tr>
            <td id="id_player">@Model.Player.id_player</td>
            <td>@Model.Player.player_firstname</td>
            <td>@Model.Player.player_surname</td>
            <td></td>
            <td>@Model.Player.player_skill</td>

            <td>@Model.Player.player_value</td>
            <td></td>
            <td>@Model.Player.name_team</td>
            <td style="text-align: right;">
                <select id="id_team">
                    <option selected="selected" value="0">Fara echipa</option>
                    @foreach (var teamInfo in Model.Teams)
                    {
                        <option value="@teamInfo.Key">@teamInfo.Value</option>
                    }
                </select>
            </td>
          </tr>

</table>
</tbody>
    <p>
        <input id="transferPlayerButton" type="button" value="Transfera" />
    </p>

【问题讨论】:

  • 我不确定这是否是根本原因,但是表格单元格上的 .value 不会为您提供 id_player 的值,您应该改用 innerText。这可能会导致您的帖子中的 playerId 为空。您是否尝试过在 Action 方法上设置断点并进行调试?你的断点命中了吗?如果是,参数的值是多少?
  • 是的,我放了一个断点,它没有被命中..
  • 首先把你的 js Transfer.js 放在 body 标签结束之前

标签: javascript asp.net-mvc


【解决方案1】:

在 AJAX 调用中,像这样传递数据:

data: JSON.stringify({ playerId: playerId, newTeamId: teamId }),

按原样发布数据时,它看起来像这样:

playerId=1&amp;newTeamId=2

但在您的 AJAX 设置中,contentType 设置为 'application/json;charset=utf-8',这意味着数据应该以 JSON 格式传递。因为数据不是以 JSON 格式传递的,所以 MVC 模型绑定器无法完成它的工作并从请求正文中获取数据(因为它认为有 JSON 数据伴随着 wite,由于 contentType)。

当您使用 JSON.stringify 时,数据将像这样在请求正文中传递:

{
    newTeamId: "2"
    playerId: "1"
}

【讨论】:

  • 我现在可以发送参数 newTeamId 参数,但 playerId 不起作用,我不知道为什么,但我会弄清楚的。非常感谢
  • 您是否按照我的回答尝试过JSON.stringify()?这确实有效,我刚才自己累了。省去麻烦,先给JSON.stringify()
  • 是的,工作,我在 var playerId = $("#id_player").html();我没注意。谢谢
  • 如果我的答案对您有用,您是否介意将其标记为正确答案,以便可能遇到相同问题的其他人知道哪种解决方案适合您。干杯。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-16
  • 1970-01-01
  • 1970-01-01
  • 2018-01-22
  • 2014-11-24
  • 2021-07-27
相关资源
最近更新 更多