1

ASPMVCアプリに取り組んでいます。ビューモデル(タスク名)から入力された選択リストがあります。選択した項目に基づいて、TaskValueのテキストボックスに10進値が配置されます。jquery側は機能しており、値はフィールドに表示されますが、送信されると、TaskValueフィールドはnullになります。送信する値を取得するにはどうすればよいですか?

ViewModel:

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; }
    }
}

TaskListモデル

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);
    }

ご協力いただきありがとうございます。

編集:ビューのドロップダウン行に「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というエラーも表示されます。

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

3 に答える 3

0

コードで見たところ、 に値を割り当てているのではなく、 に値をTaskValue割り当てているだけです$("#CompTaskModel_TaskValue").val(v)

inputまた、タグを作成するときにエラーが発生する可能性がありTaskValueます。おそらく、属性idなしで属性を割り当てているだけですname

正しい例:

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

私の推測では、モデル バインダーが値を 10 進数にバインドする際に問題を抱えているということです。私は以前にこれに遭遇しました。

これを見てください: Model Binding Decimal Values

それが役立つかどうかを確認してください。

于 2012-11-14T18:24:33.253 に答える