我正在开发一个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")
答案 0 :(得分:0)
答案 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");