Javascript变量存储Garbage而不是输入框中的值?

我试图使用jQuery / AJAX / JSON将一个值从我的主INV_Assets.Edit()视图中的传递给我的MVC5控制器方法createNewModel() 。 在那里,该值将被添加到数据库表INV_Models ,并且在成功返回时,我想刷新我的下拉列表,以便它包含新值。

但是,当我运行我当前的代码(下面)时, alert(test) )的值将随着RKW5IcXyLzel7mYJ7qqPMvrKIG8_wVv7obAJPx0NzRwgZ23QI_AmBYTOslxa290IWXYKsFSZI5xAVRL9R8JgCvm24DloP1aUBeBU_9jVVVA1而不是(Ex。) 411RKW5IcXyLzel7mYJ7qqPMvrKIG8_wVv7obAJPx0NzRwgZ23QI_AmBYTOslxa290IWXYKsFSZI5xAVRL9R8JgCvm24DloP1aUBeBU_9jVVVA1垃圾。

DROPDOWN / NEW MODEL INPUT

  
@*@Html.LabelFor(model => model.Model_Id, "Model_Id", htmlAttributes: new { @class = "control-label col-md-2" })*@ Model:
@*@Html.DropDownList("Model_Id", null, htmlAttributes: new { @class = "form-control dropdown" })*@ @Html.DropDownListFor(model => model.Model_Id, (SelectList)ViewBag.Model_List, htmlAttributes: new { @class = "form-control dropdown", @id = "selectModel" }) @Html.ValidationMessageFor(model => model.Model_Id, "", new { @class = "text-danger" })

脚本

  $('#submitNewModel').click(function () { var form = $(this).closest('form'); var test = form.find('input').first().val(); alert(test); var data = { model_description: form.find('input').first().val() }; alert(data.model_description); //var data = { model_description: $("input[name = 'model_description']").text.toString() }; var jsonData = JSON.stringify(data); alert(jsonData.valueOf()); $.ajax({ type: "POST", dataType: "JSON", url: '@Url.Action("createNewModel", "INV_Assets")', data: jsonData, success: function (resp) { alert("SUCCESS!"); }, error: function () { alert("ERROR!"); } }); 

INV_AssetsController – createNewModel()

  [HttpPost] public JsonResult createNewModel(INV_Models model) { model.created_date = DateTime.Now; model.created_by = System.Environment.UserName; model.modified_date = DateTime.Now; model.modified_by = System.Environment.UserName; // Set ID int lastModelId = db.INV_Models.Max(mdl => mdl.Id); model.Id = lastModelId+1; if (ModelState.IsValid == false && model.Id > 0) { ModelState.Clear(); } if (ModelState.IsValid) { try { db.INV_Models.Add(model); db.SaveChangesAsync(); } catch (Exception ex) { Elmah.ErrorSignal.FromCurrentContext().Raise(ex); } } return Json(new { ID = model.Id, Text = model.model_description }); } 

我的想法是每个下拉列表(其他6个)包含数据库中其他表的值(位置,制造商,模型,状态,类型,供应商),并且所选的下拉列表中的值是为我设置的值主要INV_Assets位置,制造商等的实体属性

我单独为所有其他模型的Create()设置了视图,但在我的INV_Assets.Edit()视图中我试图允许用户按下按钮[创建新],为相关表输入新值/ model(例如位置)然后将该新位置添加到DB /作为下拉选项,而不离开View。

对于我的生活,我无法弄清楚为什么我的脚本变量显示垃圾而不是我输入的值。 当我在我的控制器内部查看?model.model_description Immediate Window?model.model_description ,返回的值为null ,因此即使存储在我的变量中的垃圾也没有传递给我的控制器。

有经验的人可以权衡问题吗?


编辑

我改变了form.find('input').first().val(); to document.getElementById('textNewModel').value }; 现在值正确显示在我的变量/警报中,但它没有显示在我的Controller Action方法中 – ?model.model_description仍然返回null


编辑2

在我的ajax而不是jsonData变量中传递data ,该值正确传递到控制器! 但是,该值仍未保存到DB / Table中? 作为注释,当检查if (ModelState.IsValid == false && model.Id > 0)ModelState被清除 – 我不知道这是否与它有关?

当行return Json(new { ID = model.Id, Text = model.model_description }); 遇到,值是有效的,但在我的script alert("ID: " + data.ID + " // New Model: " + data.Text);T返回时alert("ID: " + data.ID + " // New Model: " + data.Text);T为两者提出了undefined …?

当前脚本

  $('#submitNewModel').click(function () { var form = $(this).closest('form'); var data = { model_description: document.getElementById('textNewModel').value }; $.ajax({ type: "POST", dataType: "JSON", url: '@Url.Action("createNewModel", "INV_Assets")', data: data, success: function (resp) { alert("SUCCESS!"); $('#selectModel').append($('').val(data.ID).text(data.Text)); alert("ID: " + data.ID + " // New Model: " + data.Text); // RETURNING 'undefined'...? form[0].reset(); $('#createModelFormContainer').hide(); }, error: function () { alert("ERROR!"); } }); 

编辑3

最好的我可以解决没有保存的值的问题,也许JSON没有正确返回是我的ModelState无效? 我试图解决为什么我的ModelState在我的新Controller代码中出现无效的原因:

  [HttpPost] public JsonResult createNewModel(INV_Models model) { model.created_date = DateTime.Now; model.created_by = System.Environment.UserName; model.modified_date = DateTime.Now; model.modified_by = System.Environment.UserName; // Set ID int lastModelId = db.INV_Models.Max(mdl => mdl.Id); model.Id = lastModelId+1; //if (ModelState.IsValid == false && model.Id > 0) //{ // ModelState.Clear(); //} try { if (ModelState.IsValid) // INVALID??? { db.INV_Models.Add(model); db.SaveChangesAsync(); } } catch (Exception ex) { Elmah.ErrorSignal.FromCurrentContext().Raise(ex); } return Json(new { ID = model.Id, Text = model.model_description }, JsonRequestBehavior.AllowGet); } 

这就是我当前定义的INV_Models方式:

公共类INV_Models

  { public int Id { get; set; } [Required(ErrorMessage = "Please enter a Model Description.")] public string model_description { get; set; } [Required] [DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")] public DateTime created_date { get; set; } [Required] public string created_by { get; set; } [DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")] public DateTime modified_date { get; set; } public string modified_by { get; set; } } } 

所有属性似乎都已设置,所以我不确定为什么ModelState返回为Invalid