如何在MVC中为下拉列表选择更改时阻止页面刷新

时间:2014-03-19 07:21:48

标签: asp.net-mvc

我的剃刀视图MVC中有一个下拉列表,如

   @Html.DropDownListFor(n => n.EMP_ID, (SelectList)ViewBag.EmployeeList,  new { @id = "ddlemployee" },"---choose an Employee Name--").

我已经使用jquery将select change事件应用于下拉列表,当选择Employee name获取Employee名称和实际数据时,但问题是当我在下拉列表中选择一个值时,dropdownlist设置再次设置为默认的第一个值,< / p>

从Asp.net术语的角度来看,如何阻止postbackdropdownlist

并不坚持特定的选定值
        //Redirected to Controller  
        <script>
        $(document).ready(function () {
            $("#ddlemployee").change(function () {
                location.href ='@Url.Action("GetEmployeeDetails", "Employer")'
            });
        });
        </script>

        //Action Method in Employer Controller
        public ActionResult GetEmployeeDetails(Timesheetmodel model)
        {
        try
        {
            ViewBag.EmployeeList = objts.getEmployeeNames();

            var emps = from n in db.TIMESHEETs
                       where n.RES_ID == model.EMP_ID
                       select n;
            int count = emps.Count();

            foreach (TIMESHEET ts in emps)
            {
                model.PROJ_ID = ts.PROJ_ID;
                model.SUN_HRS = ts.SUN_HRS;
                model.MON_HRS = ts.MON_HRS;
                model.TUE_HRS = ts.TUE_HRS;
                model.WED_HRS = ts.WED_HRS;
                model.THU_HRS = ts.THU_HRS;
                model.FRI_HRS = ts.FRI_HRS;
                model.SAT_HRS = ts.SAT_HRS;
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
        return View("Timesheet", model);
    }

2 个答案:

答案 0 :(得分:2)

ASP.Net Webforms使用一些名为 ViewState

的东西来实现 StateFullness

它在页面中实现为隐藏字段,用于在请求之间保存数据。

通过这种方式,asp.net webforms实现了回发机制,并能够在请求中保存值。

由于 Http是无状态协议,这意味着它与请求之间没有关系。

ASP.Net MVC

View State 缺席

所以,你必须通过部分回发来停止回发。这意味着您需要发送异步请求,而不需要刷新整个页面。

可以使用AJAX。你可以使用

 MVC Ajax or Jquery Ajax.

使用 AJax ,我们可以eliminate post back,然后执行部分回发

<强>解决方案:

$("#dropdownid").change(function(event e)
{
     //Make your ajax request here..
});

希望这有帮助

<强>更新

$("#dropdownid").change(function () {
    $.ajax({
        type: "post",
        contentType: "application/json;charset=utf-8",
        url: /*Your URL*/,
        success: function (data) {
            //do your callback operation  
        }                  
    });
});

答案 1 :(得分:0)

知道了。

将来自jquery的Empid作为查询字符串传递,如:

       <script>
        $(document).ready(function () {
            $("#ddlemployee").change(function () {
                debugger;
                var empid = $("#ddlemployee").val();
                location.href = '@Url.Action("GetEmployeeDetails", "Employer")?empid=' + empid ;

        });
    });
       </script>

并在foreach循环之前将“empid”分配给Action方法中的“Empid”,如

        model.EMP_ID = empid;//in Controller Action Method before foreachloop of my code
                             // and this model.EMP_ID binded to dropdownlist.    

此EMP_ID将相同的ID传递给选中的下拉列表。多数民众赞成。