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 : </span> <se
$.post()
方法不起作用?我按下按钮,但它不会发布到EditClassLessonHour
以下是查看代码:
<div class="jumbotron">
<form id="editClassLessonHour">
@Html.HiddenFor(model => model.ID)
<span> Classes : </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()