1

我正在开发一个 ASP MVC 应用程序。我有一个从视图模型(任务名称)填充的选择列表。根据选定的项目,十进制值将放置在 TaskValue 的文本框中。jquery 端正在工作,该值显示在字段中,但提交时,TaskValue 字段为空。如何获取要提交的值?

视图模型:

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

3 回答 3

0

My guess is what is happening is the model binder is having an issue with binding the value to a decimal. I've encountered this before.

Take a look at this: Model Binding Decimal Values

See if that helps.

于 2012-11-14T18:24:33.253 回答
0

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

此外,错误可能是当您创建标签inputTaskValue,也许您只是分配了id没有属性的name属性。

正确的例子:

<input type="hidden" name="TaskValue" id="TaskValue" value="" />
于 2012-11-14T21:45:59.573 回答
0

设置其值后,触发此输入字段的更改事件。

$("yourInputSelector").hide();
$("yourInputSelector").val("your Value");
$("yourInputSelector").trigger("change");
于 2020-08-30T18:33:46.503 回答