我希望根据我的DropDownFor中的选择,将我的EditorFor中的值更改为我的数据库中的值。
在我的Controller
:
using (RexusTradingEntities RTE = new RexusTradingEntities())
{
if (PIVM.Pipe_Absolute_Roughness_Override != null || PIVM.Pipe_Absolute_Roughness_Override != 0)
{
PIVM.Pipe_Absolute_Roughness = Convert.ToDecimal(PIVM.Pipe_Absolute_Roughness_Override);
}
else
{
var PipeAbsoluteRoughness = (from P in RTE.ProjectInformations
join PM in RTE.PipeMaterials on P.Pipe_Material equals PM.Material_Name
where P.pkiProjectID == id
select PM).SingleOrDefault();
PIVM.Pipe_Absolute_Roughness = Convert.ToDecimal(PipeAbsoluteRoughness.Material_Value);
}
}
查看:
@Html.EditorFor(model => model.Pipe_Absolute_Roughness, new { htmlAttributes = new { @class = "form-control col-md-5" } })
这在第一次加载View时有效,但我希望当DropDownFor选定值发生变化时,EditorFor中的值会发生变化。
我想在以下EditorFor Value更改时更改相同的EditorFor值:
@Html.EditorFor(model => model.Pipe_Absolute_Roughness_Override, new { htmlAttributes = new { @class = "form-control" } })
我很感激帮助,因为我仍然是MVC的新手并且还在学习绳索。
感谢您的帮助。
答案 0 :(得分:0)
排序好了。我发布了我在下面做的事情。请注意,我只提供我使用的特定项目,而不是所有内容(例如,我没有发布整个视图,只发布我使用的部分)
查看:
@Html.DropDownListFor(model => model.Pipe_Material, Model.Pipe_MaterialList, new { @class = "form-control", id = "ddlPipe_Material", @onchange = "ChangePipeMaterialValue(this.value)" })
@Html.EditorFor(model => model.Pipe_Absolute_Roughness, new { htmlAttributes = new { @class = "form-control col-md-5", @id = "txtPipe_Absolute_Roughness" } })
@section scripts
{
<script src="@Url.Content("~/bootstrap.min.js")"></script>
<script src="@Url.Content("~/jquery-2.2.3.min.js")" type="text/javascript"></script>
<script>
function ChangePipeMaterialValue(val) {
//var Pipe_Material = $("#ddlPipe_Material").val();
var ProjectDetails =
{
"Pipe_Material": val
};
$.ajax({
url: '/ProjectInformation/GetPipeMaterialValues/',
data: JSON.stringify(ProjectDetails),
type: 'POST',
contentType: 'application/json; charset=utf-8',
success: function (data) {
var m = $('#txtPipe_Absolute_Roughness');
m.val(data);
}
});
}
</script>
}
控制器:
[HttpPost]
public JsonResult GetPipeMaterialValues(ProjectInformationViewModel model)
{
decimal PipeMaterialValue;
using (RexusTradingEntities RTE = new RexusTradingEntities())
{
var PipeMaterialValueQuery = (from PM in RTE.PipeMaterials
where PM.Material_Name == model.Pipe_Material
select PM).FirstOrDefault();
PipeMaterialValue = Convert.ToDecimal(PipeMaterialValueQuery.Material_Value);
}
return Json(PipeMaterialValue, JsonRequestBehavior.AllowGet);
}
实际上,我甚至不需要将模型传递给Controller,我只需传递参数&#34; val&#34;通过URL,但我将它保留原样,因为它完成了工作。我希望将来可以帮助其他人。
答案 1 :(得分:0)
@Html.EditorFor(model => model.Pipe_Absolute_Roughness_Override, new { htmlAttributes = new { @Value=@Html.ValueFor(x=>x.Pipe_Absolute_Roughness) , @class = "form-control" } })
这不是下拉菜单,但也很有用