发布的数据不会绑定到操作参数

时间:2015-09-03 17:10:10

标签: asp.net-mvc-4 post model-view-controller data-binding

这是我的观点

    @using System.Web.Optimization
@model IEnumerable<DnDBeginner.Models.User>

@{
    ViewBag.Title = "Index";
}

<div class="row">
    <div class="col-md-12">
        <h4>Users</h4>
    </div>
</div>

@using (Html.BeginForm("ListUserCharacters", "Players", FormMethod.Post, new { id="UserForm"}))
{
    <input id="userID" type="hidden" />
    foreach (var item in Model)
    {
        <div class="row">
            <div class="col-md-1">
                @item.UserName
            </div>
            <div class="col-md-11">
                <span class="link" data-userid="@item.UserID.ToString()">Choose</span>
                <hr />
            </div>
        </div>
    }
    <input type="submit" value="submit" />
}

<script>
    $('.link').click(function () {
        $('#userID').val($(this).data('userid'));
        $('#UserForm').submit();
});
    });
</script>

这是我的行动

    [HttpPost]
    public ActionResult ListUserCharacters(string userID)
    {
        var userCharacters = new { userID = userID };
        return View();
    }

成功访问操作但userID获取空值,因此它不会绑定到隐藏字段值。我错过了什么?不知道它是否相关,但是当我查看chromes网络工具的“网络”部分时,我得到一个“请求网址:http://localhost:61487/Players/ListUserCharacters 请求标题 临时标题显示为“因此我甚至不确定表单数据是否已成功发布。

2 个答案:

答案 0 :(得分:0)

帖子请求正文应该类似于userID ='用户ID'。所以你应该看到身体里的东西。您是否尝试过添加'FromBody'。

formatID AND timestamp

此外,如果这不能解决问题,您可以帮助调试以确保在客户端上使用限定语句填充该值以确保#userID具有某些内容。

public ActionResult ListUserCharacters([FromBody]string userID)
{
    var userCharacters = new { userID = userID };
    return View();
}

最后,如果未填充该值,请尝试将范围放在“a”元素中,以使点击更可靠。

你可以尝试这样的事情......没有经过我的测试。

    var value = $('#userID').val();
    if (value === '' || value === undefined || value === null) {
        console.log('no value');
    }
    else {
        console.log('value is', value);
        $('#UserForm').submit();
    }

答案 1 :(得分:0)

感谢您抽出宝贵时间回答我的问题。

事实证明问题是在隐藏字段<input id="userID" type="hidden" />中,&#34;名称&#34;属性是必需的。看来,在提交表格时,两者都是&#34; id&#34;和&#34;名称&#34;输入元素的属性是必需的,否则浏览器将无法正确编码上载数据和请求。这就是我获得&#34;临时标题的原因&#34; chromes web工具的网络部分中的消息。所以这个<input id="userID" name="userID" type="hidden" />修复了它。