来自jquery填充字段的值,而不是保存到模型

时间:2012-11-14 18:18:03

标签: jquery asp.net-mvc

我正在开发一个ASP MVC应用程序。我有一个从视图模型(任务名称)填充的选择列表。基于所选项目,在TaskValue的文本框中放置一个十进制值。 jquery端正在工作,该值显示在字段中,但是在提交时,TaskValue字段为null。我怎样才能获得提交的价值?

视图模型:

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")

3 个答案:

答案 0 :(得分:0)

我的猜测是,模型绑定器遇到了将值绑定到小数的问题。我以前遇到过这个。

看看这个:Model Binding Decimal Values

看看是否有帮助。

答案 1 :(得分:0)

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

此外,错误可能是在您将标记input创建为TaskValue时,也许您只是在没有id属性的情况下分配属性name。 / p>

正确的例子:

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

答案 2 :(得分:0)

设置此输入字段的值后,发生火灾更改事件。

$("yourInputSelector").hide();
$("yourInputSelector").val("your Value");
$("yourInputSelector").trigger("change");