【问题标题】:Form is not Submitting any Value using Asp.Net MVC表单未使用 Asp.Net MVC 提交任何值
【发布时间】:2016-05-07 21:03:51
【问题描述】:
In Model:


public int TeacherCourseAssignId { set; get; }
    public int TeacherID { set; get; }
    public decimal TeacherRemainingCredit { set; get; }
    public int CourseId { set; get; }
    public string CourseName { set; get; }
    public decimal CourseCredit { set; get; }


In controller:

[HttpPost] 公共 ActionResult TeacherCourseAssign(int departmentId, int teacherId, int courseId) {

    ViewBag.Departments = GetDepartments();
    return View();
}
public ActionResult SaveTeacherCourseAssign(TeacherCourseAssign teacherCourseAssign)
{

    ViewBag.Departments = GetDepartments();
    ViewBag.Message = teacherCourseAssignManager.Save(teacherCourseAssign);
    ModelState.Clear(); 
    return View();
}
public JsonResult SaveTeacheCourseAssign(TeacherCourseAssign teacherCourseAssign)
{
    //Code
    return Json(true, JsonRequestBehavior.AllowGet);
}

public JsonResult GetTeachersByDepartmentId(int deptId)
{
    var teachers = GetTeacher();
    var teacherList = teachers.Where(a => a.DepartmentId == deptId).ToList();

    return Json(teacherList, JsonRequestBehavior.AllowGet);
}

public JsonResult GetCoursesByDepartmentId(int deptId)
{
    var courses = GetCourses();
    var courseList = courses.Where(a => a.DepartmentId == deptId).ToList();
    return Json(courseList, JsonRequestBehavior.AllowGet);
}

public JsonResult GetTeachersInfoByTeacherId(int teacherId)
{
    var teachers = GetTeacher();
    var teacherInfo = teachers.Where(t => t.TeacherID == teacherId).ToList();

    return Json(teacherInfo, JsonRequestBehavior.AllowGet);
}
public JsonResult GetCoursesInfoByCourseId(int courseId)
{
    var courses = GetCourses();
    var courseList = courses.Where(c => c.CourseId == courseId).ToList();
    return Json(courseList, JsonRequestBehavior.AllowGet);
}

在视图中:

@model Last.Models.TeacherCourseAssign


@{
    ViewBag.Title = "Teacher Course Assign";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Teacher Course Assign</h2>

<form method="POST" id="myForm">
    <table>
        <tr>
            <td>
                <label for="departmentId">Select Department</label>
            </td>
            <td>
                <select name="departmentId" id="departmentId">
                    <option value="">Select...</option>
                    @foreach (var department in ViewBag.Departments)
                    {
                        <option value="@department.DeptId">@department.DeptName</option>
                    }
                </select>
            </td>
        </tr>

        <tr>
            <td><label for="teacherId">Teacher</label></td>
            <td>
                <select name="teacherId" id="teacherId"></select>
            </td>
        </tr>

        <tr>
            <td>@Html.LabelFor(m => m.CreditToBeTaken)</td>
            <td>@Html.TextBoxFor(m => m.CreditToBeTaken)</td>
        </tr>

        <tr>
            <td>@Html.LabelFor(r => r.TeacherRemainingCredit)</td>
            <td>
                @Html.TextBoxFor(r => r.TeacherRemainingCredit)

            </td>
        </tr>


        <tr>
            <td><label for="courseId"></label></td>
            <td>

                <select name="courseId" id="courseId"></select>
            </td>
        </tr>
        <tr>
            <td>@Html.LabelFor(n => n.CourseName)</td>
            <td>

               @Html.TextBoxFor(n => n.CourseName)
            </td>
        </tr>
        <tr>
            <td>@Html.LabelFor(c => c.CourseCredit)</td>
            <td>
                @Html.TextBoxFor(c => c.CourseCredit)
                <br>
            </td>
        </tr>




        <tr>
            <td></td>
            <td><input type="submit" id="Submit" value="Assign" class="btn btn-default" /></td>
        </tr>
    </table>

</form>


@section scripts
{
    <script src="~/Scripts/jquery-1.10.2.min.js"></script>

    <script>
        $(document).ready(function() {
            $("#departmentId").change(function() {


                var dept = $("#departmentId").val();
                $("#teacherId").empty();
                $("#courseId").empty();

                var json = { deptId: dept };
                //$("#teacherId").append('<option value="">Select</option>');
                $.ajax({
                    type: "POST",
                    url: '@Url.Action("GetTeachersByDepartmentId", "TeacherCourseAssign")',
                    contentType: "application/json; charset=utf-8",
                    data: JSON.stringify(json),
                    success: function(data) {
                        $("#teacherId").append('<option value="">Select</option>');
                        $.each(data, function(key, value) {

                            $("#teacherId").append('<option value=' + value.TeacherID + '>' + value.TeacherName + '</option>');

                        });
                    }
                });

                //   $("#courseId").append('<option value="">Select</option>');


                $.ajax({
                    type: "POST",
                    url: '@Url.Action("GetCoursesByDepartmentId", "TeacherCourseAssign")',
                    contentType: "application/json; charset=utf-8",
                    data: JSON.stringify(json),
                    success: function(data) {
                        $("#courseId").append('<option value="">Select</option>');
                        $.each(data, function(key, value) {
                            $("#courseId").append('<option value=' + value.CourseId + '>' + value.CourseCode + '</option>');
                        });
                    }
                });
            });

            $("#teacherId").change(function() {
                var tech = $("#teacherId").val();
                var json = { teacherId: tech };
                $.ajax({
                    type: "POST",
                    url: '@Url.Action("GetTeachersInfoByTeacherId", "TeacherCourseAssign")',
                    contentType: "application/json; charset=utf-8",
                    data: JSON.stringify(json),
                    success: function(data) {
                        $.each(data, function(key, value) {
                            $("#CreditToBeTaken").val(value.CreditToBeTaken);

                            $("#TeacherRemainingCredit").val(value.CreditToBeTaken);
                        });
                    }
                });
            });

            $("#courseId").change(function() {
                var tech = $("#courseId").val();
                var json = { courseId: tech };
                $.ajax({
                    type: "POST",
                    url: '@Url.Action("GetCoursesInfoByCourseId", "TeacherCourseAssign")',
                    contentType: "application/json; charset=utf-8",
                    data: JSON.stringify(json),
                    success: function(data) {
                        $.each(data, function(key, value) {
                            $("#courseName").val(value.CourseName);
                            $("#CourseCredit").val(value.Credit);

                        });
                    }
                });
            });


        });
    </script>
}

我的部门、课程和教师信息的级联下拉菜单运行良好。但是当我点击提交时。它没有向我的后控制器 SaveTeacherCourseAssign() 提交任何值。想知道我是否以错误的方式提交模型?

【问题讨论】:

  • 您期望什么值,什么不可用?
  • 作为我的模型,我想将所有数据传递到我的数据库。但是由于我的视图正在加载我传递给它的所有数据。级联ajax调用完全正常。但是当我用我选择的数据按下提交时..没有任何反应。它只是清除我的文本框。

标签: javascript asp.net-mvc


【解决方案1】:

你能打到控制器吗?默认情况下,所有的控制器动作都会监听 GET 请求,所以如果你不能点击它,你必须用[HttpPost] 装饰它才能点击它。

另外,我没有看到任何针对它的 ajax 请求。除非它是表单,否则如果页面/视图名称不同,此时您可能希望在其上显式放置一个操作属性。

如果您在提交时实际上遇到了断点,那么您是否只是获得了一个空对象?

【讨论】:

  • 是的,我的 Get 请求工作正常。正在加载我想要的所有下拉列表和值...
  • 我说的是你的SaveTeacherCourseAssign 端点。你能打到吗?
  • 所以,a) 放置action="SaveTeacherCourseAssign"(或任何您的控制器/操作路径,也可以通过@Url.Action("method", "controller") 解决,b)使用[HttpPost] 装饰您的端点
  • 已经尝试过了..但它没有将任何价值传递给我的模型。
  • 好的,看看你的其他帖子......如果你打算通过 AJAX 提交,你可能希望你执行以下操作(在我已经建议的基础上):对于初学者,将 jQuery 函数绑定到 $('form').on('submit', function(e) { e.preventDefault(); //Do whatever else you need here }); 首先,您需要绑定表单以便能够异步发送,其次,e.preventDefault() 确保您不会同步提交。
【解决方案2】:

好的,你有 form 元素,但它没有任何 action 属性。你必须像这样添加它:

<form method="POST" id="myForm"
action="@Url.Action("your_action_method_name" , "your_controller_name")" >

我认为这就是你所缺少的。

【讨论】:

  • 试过
    但没有改变..我想知道的是我的数据没有正确绑定模型?
  • 您将字段替换为您的操作名称和控制器名称,对吧?在你的情况下应该是
猜你喜欢
  • 2016-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-07
相关资源
最近更新 更多