如何根据DropDownListFor onChange更改EditorFor Value(来自DB中的值)?

时间:2016-06-15 17:19:42

标签: razor asp.net-mvc-5

我希望根据我的DropDownFor中的选择,将我的EditorFor中的值更改为我的数据库中的值。

在我的Controller

中拉取值进入TextboxFor的代码
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的新手并且还在学习绳索。

感谢您的帮助。

2 个答案:

答案 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" } })

这不是下拉菜单,但也很有用