这是我的观点
@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 请求标题 临时标题显示为“因此我甚至不确定表单数据是否已成功发布。
答案 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" />
修复了它。