我的剃刀视图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术语的角度来看,如何阻止postback
到dropdownlist
?
//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);
}
答案 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传递给选中的下拉列表。多数民众赞成。