2012-04-07 80 views
2

编辑: 看过我这样做的方式后,我决定更改我的整个视图模型,因此此问题已无效。我不介意知道我做错了什么,但我真的不需要我的项目的答案。MVC3 EditorFor()更改JavaScript模型中的值无法识别更改

谢谢!

当下拉列表的值发生变化时,我使用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不起作用(文本框上没有标识)。显然,我使用错误的方法来更改客户端上的值,但我不知道正确的方法。

谢谢!

回答

2

更改javascript。

document.getElementById('txtMileageOut').value 

document.getElementById('MileageOut').value 

此外,你应该使用jQuery和移动的JavaScript出自己的外部文件。它也会简化JS代码。你可以使用分类器来代替ID,并用更少的代码做更多的事情。

+0

谢谢。当我回来时,我会试试这个。 – user1304444 2012-04-07 21:19:48

+0

这不起作用。 Firebug说:'document.getElementById(“MileageOut”)为空' – user1304444 2012-04-08 02:41:10

+0

呈现的代码是什么(由浏览器看到)? – 2012-04-09 16:19:57