Javascript 将身份发送到控制器post操作

Javascript 将身份发送到控制器post操作,javascript,jquery,asp.net-mvc,Javascript,Jquery,Asp.net Mvc,我有一页是这样写的: <div class="col-sm-2 displaybutton"> <div data-point-to="displaysHeader"> @using (Html.BeginForm("Administration", "Home", FormMethod.Post)) { <button id="btnAdministration" ty

我有一页是这样写的:

<div class="col-sm-2 displaybutton">
        <div data-point-to="displaysHeader">
            @using (Html.BeginForm("Administration", "Home", FormMethod.Post))
            {
                <button id="btnAdministration" type="button" style="width:150px;height:50px;background-color:white;color:blue;border:none;font-size:medium" onclick="return GotoAdminstration();">Administration</button>
            }
        </div>
    </div>
    <div class="col-sm-2 displaybutton">
        <div data-point-to="pagesHeader">
            @using (Html.BeginForm("Indexes", "Meeting", FormMethod.Post))
            {
                <button id="btnMeetingSchedule" type="submit" style="width:150px;height:50px;background-color:white;color:blue;border:none;font-size:medium" onclick="return ShowOverlay();">Meeting Schedule</button>
            }
        </div>
    </div>
然后,当我尝试发布时:

function GotoAdminstration() {
    ShowOverlay();
    var form = $('<form method="POST" action="@Url.Action("Administration","Home")">');
    form.append($('<input type="hidden" name="ident" value="' + user + '">'));
    $(body).append(form);
    form.submit();
}
函数GotoAdminstration(){
ShowOverlay();
变量形式=$('');
表格.附加($('');
$(正文)。附加(表格);
表单提交();
}

Bu动作参数始终为空。你知道我做错了什么吗?

在你的cshtml文件中包括这样一个脚本标记

<script>
     var urlString='@Html.Raw(Url.Action("Administration","Home"))';
</script>

var urlString='@Html.Raw(Url.Action(“管理”、“主页”));
然后尝试在javaScript文件中使用此选项:

var form = $('<form method="POST" action="'+urlString+'">');
var form=$('');

无需使用整个
表单
标记作为选择器,您只需向表单添加
id
属性并将其用作选择器:

查看

@using (Html.BeginForm("Administration", "Home", FormMethod.Post, new { id = "adminform" }))
{
    // form contents
}
@using (Html.BeginForm("Administration", "Home", FormMethod.Post, new { id = "adminform" }))
{
    @Html.HiddenFor(model => model.Ident)
    <button id="btnAdministration" type="button" style="width:150px;height:50px;background-color:white;color:blue;border:none;font-size:medium">Administration</button>
}
JS

$('#adminform').submit();
$('#btnAdministration').click(function () {
    ShowOverlay();
    $('#Ident').val(user); // add 'user' variable content inside hidden field
    $('#adminform').submit();
});
请注意,在提交表单之前添加隐藏的
input
元素听起来不是一个好主意(您需要先反序列化它)。尝试在表单中使用viewmodel属性和
HiddenFor
helper(我更喜欢使用jQuery
click
event而不是
onclick
):

查看

@using (Html.BeginForm("Administration", "Home", FormMethod.Post, new { id = "adminform" }))
{
    // form contents
}
@using (Html.BeginForm("Administration", "Home", FormMethod.Post, new { id = "adminform" }))
{
    @Html.HiddenFor(model => model.Ident)
    <button id="btnAdministration" type="button" style="width:150px;height:50px;background-color:white;color:blue;border:none;font-size:medium">Administration</button>
}

当我删除加号时,我仍然会在附加报价上得到一个错误。您希望在这里实现什么?将模型发送到视图,然后将其全部原封不动地发送回来(您已经知道它在服务器上是什么,所以性能会下降),这有什么意义呢。您已经将一个javascript对象绑定到隐藏输入,而不是c#model,因此需要在POST方法中反序列化隐藏输入的值。只需传回模型的ID(作为表单中的路由参数(无输入,无脚本),然后在POST方法中再次获取它。