Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Post方法没有';在MVC中不能使用html表单_Html_Asp.net Mvc_Post - Fatal编程技术网

Post方法没有';在MVC中不能使用html表单

Post方法没有';在MVC中不能使用html表单,html,asp.net-mvc,post,Html,Asp.net Mvc,Post,为什么$.post()方法不起作用?我按下按钮,但它不会发布到EditClassLessonHour 以下是查看代码: <div class="jumbotron"> <form id="editClassLessonHour"> @Html.HiddenFor(model => model.ID) <span> Classes &nbsp;: </span> <se

为什么
$.post()
方法不起作用?我按下按钮,但它不会发布到
EditClassLessonHour

以下是查看代码:

<div class="jumbotron">

    <form id="editClassLessonHour">

        @Html.HiddenFor(model => model.ID)

        <span> Classes &nbsp;: </span>
        <select name="classes" id="classes">
            @foreach (var item in ViewBag.classes as List<SelectListItem>)
            {
                <option value="@item.Value">@item.Text</option>
            }
        </select>
        <br /><br />

        <div class="input-group">
            <span class="input-group-addon" name="lessons" id="lessons">Lessons : </span>
            @Html.DropDownListFor(x => x.LessonName, (IEnumerable<SelectListItem>)ViewData["lesson"], new { @class = "form-control", placeholder = "Lesson", aria_describedby = "txtClassNumber" })
            @Html.ValidationMessageFor(model => model.LessonName)
        </div>
        <br />

        <div class="input-group">
            <span class="input-group-addon" name="hours" id="hours">Hour : </span>
            @Html.DropDownListFor(x => x.Hour, (IEnumerable<SelectListItem>)ViewData["hour"], new { @class = "form-control", placeholder = "Lesson", aria_describedby = "txtClassNumber" })
            @Html.ValidationMessageFor(model => model.Hour)
        </div>
        <br />

        <input type="button" value="Kaydet" id="kaydet" class="btn btn-success" onclick="post(); " />

    </form>
    <br />
</div>

<script>
    $.post('/ClassLessonHour/EditClassLessonHour',{
        classId: $('#classes').val(),
        lessonId: $('#lessons').val(),
        hourId: $('#hours').val()
    }, function (result) {
        $('#message').html(result.message);
    });
</script>
我能做什么?我希望当我按下按钮时,表单应该发布到控制器

onclick="post();"
您没有名为
post
的函数。你根本没有任何功能。您只需在页面加载后立即执行AJAX POST请求

完全删除
onclick
属性,并将AJAX调用绑定到按钮的单击事件。大概是这样的:

$(function () {
    $('#kaydet').on('click', function () {
        $.post('/ClassLessonHour/EditClassLessonHour',{
            classId: $('#classes').val(),
            lessonId: $('#lessons').val(),
            hourId: $('#hours').val()
        }, function (result) {
            $('#message').html(result.message);
        });
    });
});

虽然这里似乎有更多的问题。例如,这:

$('#lessons').val()

id=“lessons”
元素是一个没有“值”的
。您希望针对的是由
@Html.DropDownListFor
生成的
,而不是它附近的
。在浏览器中检查HTML以查看该服务器端代码生成的内容。它可能有一个
id
name
,可以在jQuery选择器中使用。(同样的问题也适用于您的
#hours
元素。)

“删除onclick”,id=“lessons”被移动到div和$(函数(){…已添加,但不起作用again@Embabu:您在该评论中试图描述的内容一点也不清楚。如果您更新了代码,请将其包含在问题中。还包括问题的具体描述以及您所做的调试。
{classId:$('#classes').val(),lessonId:$('#课程').val(),hourId:$(“#hours”).val()}
可以简单地替换为
$(“#editClassLessonHour”).serialize()
,以实现更高的简洁性和可维护性(尽管在这种情况下,可以说应该删除多余的隐藏控件,以避免不必要地发回)。它只会根据表单控件的内容自动创建post变量。@ADyson:True。不过,如果序列化更改了键,它们可能还需要修改目标操作方法的签名。理想情况下,无论如何都应该是一个模型,理想情况下是同一个模型(或非常类似)与最初用于填充表单的名称不同。@David true。我没有注意到名称/键不同。但是,是的,应该使用viewmodel来完成所有操作。我怀疑OP还没有掌握MVC的所有概念,否则它就会像这样完成。我想
的ID/名称将是LessonName和Hour-MVC nor默认情况下,mally使用模型属性的名称。“不工作”如何?您是否检查了浏览器控制台中的错误?以及“网络”选项卡,以查看是否发出了任何请求,如果是,响应是什么?听起来好像您实际上没有试着调试它。“不工作”这是用户会告诉你的。作为一名程序员,你可以做更多的调查。但无论如何,从代码中可以明显看出,$.post命令将在脚本标记加载到页面的那一刻运行。根本没有什么可以将其与按钮单击事件联系起来。你的“onclick”引用了“post()代码中不存在的函数。此外,为了更好的可读性和可维护性,您应该使用不引人注目的事件处理程序,而不是内联事件处理程序。任何简单的jQuery教程都将向您展示如何处理单击事件,然后执行一些代码。
$('#lessons').val()