2012-11-14 29 views
1

我正在一个ASP MVC应用程序。我有一个从视图模型(任务名称)填充的选择列表。基于选定的项目,十进制值将放置在TaskValue的文本框中。 jquery方面正在工作,该值显示在字段中,但提交时,TaskValue字段为空。我如何获得提交的价值?从jquery填充的字段值,不保存到模型

视图模型:

namespace MyJobs.Models 
{ 
    public class ViewModel 
    { 
     public CompletedTask CompTaskModel { get; set; } 
     public TaskList TaskListModel { get; set; } 

     public IEnumerable<SelectListItem> Tasks { get; set; } 
    } 
} 

CompletedTasks型号:

namespace MyJobs.Models 
{ 
    [MetadataType(typeof(CompTaskData))] 
    public partial class CompletedTask 
    { 
    } 

    public class CompTaskData 
    { 
     public string TaskName { get; set; } 
     public decimal TaskValue { get; set; } 
     public DateTime CompDate { get; set; } 
    } 
} 

任务列表模型

namespace MyJobs.Models 
{ 
    [MetadataType (typeof(TaskListData))] 
    public partial class TaskList 
    { 
    } 

    public class TaskListData 
    { 
     public string TaskName { get; set; } 
     public decimal TaskValue { get; set; } 

    } 
} 

视图:

<div class="editor-field"> 
     @Html.DropDownListFor(m => m.CompTaskModel.TaskName, new SelectList(Model.Tasks, "Value", "Text"), "Select a Job") 
     @Html.ValidationMessageFor(model => model.CompTaskModel.TaskName) 
    </div> 

jquery的:

$(document).ready(function() { 
    $("#CompTaskModel_TaskName").change(function() { 
     var v = 0; 
//  var value = $("#CompTaskModel_TaskValue").val(); 
     var task = $("#CompTaskModel_TaskName").val(); 

     switch (task) { 
      case "1": 
       v = "$0.50"; 
      break; 
      case "2": 
       v = "$0.75"; 
      break; 
      case "3": 
       v = "$0.50"; 
      break; 
      case "4": 
       v = "$0.75"; 
       break; 
      default: 
       v = "Select a Job!"; 
      } 

      $("#CompTaskModel_TaskValue").val(v); 
    }); 
    }); 

控制器:

public ActionResult Index() 
    { 
     ViewModel vm = new ViewModel(); 

     vm.Tasks = from e in db.TaskList.ToArray() 
        select new SelectListItem 
        { 
         Value = e.TaskId.ToString(), 
         Text = e.TaskName 
        }; 

     return View(vm); 
    } 

谢谢您的帮助。

编辑:我还得到一个错误,“对象引用不设置到对象的实例”的观点的dropdownfor行:

 @Html.DropDownListFor(m => m.CompTaskModel.TaskName, new SelectList(Model.Tasks, "Value", "Text"), "Select a Job") 
+0

你应该首先区分,如果问题是出在MVC或jQuery的。你说jQuery正在工作,那么你为什么要给你的问题增加噪音。如果您向我们提供与问题最相关的信息,帮助您会容易得多。我希望在视图中看到更多的表单(您甚至没有向我们展示无法在提交时绑定的输入)。对你的EDIT ..要么发送'空'模型或属性CompTaskModel您的模型类为空 – mipe34

回答

0

我的猜测是正在发生的事情是模型绑定将值绑定到小数时遇到问题。我以前遇到过这个。

看看这个:Model Binding Decimal Values

看看是否有帮助。

+0

感谢控制,我试过这个,但它没有帮助。 – BattlFrog

0

从我在代码中看到的内容中,您没有将值分配给TaskValue,只有您将值分配给$("#CompTaskModel_TaskValue").val(v)

而且,可以是错误当您创建标签inputTaskValue,也许你只是你没有name属性分配属性id

正确示例:

<input type="hidden" name="TaskValue" id="TaskValue" value="" />