JavaScript 模型中的 MVC3 EditorFor() 更改值无法识别更改

MVC3 EditorFor() Change Value in JavaScript Model Does Not Recognize Changes

本文关键字:识别 模型 MVC3 EditorFor JavaScript      更新时间:2023-09-26

>编辑:在看了我这样做的方式后,我决定改变我的整个视图模型,所以这个问题不再有效。 我不介意知道我做错了什么,但我真的不需要我的项目的答案。

谢谢!

当下拉列表的值更改时,我使用 Javascript 更改文本框的值。 当页面发布时,在Javascript中更改的值始终为零。

Javascript似乎工作正常,但该值无法返回到服务器。

这是我的视图模型:

...
[Required(ErrorMessage = "'"{0}'" is required")]
    [Display(Name = "Mileage Out")]
    public decimal MileageOut { get; set; }
[Required(ErrorMessage = "Vehicle is required.")]
    public Guid VehicleID { get; set; }
    [Display(Name = "Vehicle")]
    public List<SelectListItem> Vehicles { get; set; }
....

以下是我的观点:

....
<div class="editor-label">
        @Html.LabelFor(model => model.Vehicles, "Vehicle")
    </div>
    <div class="editor-field">
        @Html.DropDownListFor(model => model.VehicleID, new SelectList(Model.Vehicles, "Value", "Text"), "Vehicle is required . . .", new {@onchange="GetLastMileage(this.value);"})
        @Html.ValidationMessageFor(model => model.Vehicles)
    </div> 
    <div class="editor-label">
        @Html.LabelFor(model => model.MileageOut)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.MileageOut, null, "txtMileageOut")
        @Html.ValidationMessageFor(model => model.MileageOut)
    </div>
...
<script type="text/javascript">
function GetLastMileage(vehicleID) {
    switch (String(vehicleID))
    {
        @{
            foreach (KeyValuePair<string, decimal> item in Model.VehiclesLastMileage)
            {
                @Html.Raw("case '" + item.Key + "': document.getElementById('txtMileageOut').value = '" + ((decimal)item.Value).ToString() + "';break;")
            }
        }
        default: return 0;
    }
}
</script>

我发现如果我改变这个:

@Html.EditorFor(model => model.MileageOut, null, "txtMileageOut")

对此:

@Html.EditorFor(model => model.MileageOut)

日期返回服务器正常,但 JavaScript 不起作用(文本框上没有 ID)。 显然,我使用了错误的方法在客户端上更改值,但我不知道正确的方法。

谢谢!

更改 JavaScript。

document.getElementById('txtMileageOut').value

document.getElementById('MileageOut').value

此外,你应该使用 jQuery 并将 javascript 移到它自己的外部文件中。它还将大大简化JS代码。您可以使用分类作为选择器而不是 ID,并在更少的代码中执行更多操作。