在Asp.net mvc中,一旦验证失败,如何在控件中维护先前选择的值
本文关键字:维护 控件 选择 失败 net Asp mvc 验证 | 更新日期: 2023-09-27 17:50:26
我有一个局部视图_Psite
,其中包含两个下拉列表和一个文本框,第二个是基于一个首先作为json结果(级联下拉)。那么现在假设如果客户在第一个下拉列表中选择值,第二个下拉列表将基于jquery和json加载。然后,当他在文本框验证失败(Session["username"] == null
)中输入错误的值时,它将在帖子后显示相同的部分视图,以便重新进入。现在我面临的问题是两个下拉列表正在重置为默认值。我已经谷歌了,但找不到解决方案
下面是_Psite
的视图@using (Ajax.BeginForm("_firstGridAll", "mnis", new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "PsitegridContent" }))
{
<div style="float: left">
@Html.DropDownList("REGION_CODE", (SelectList)ViewBag.Categories, "Select region code")
@Html.ValidationMessageFor(m => m.REGION_CODE)
</div>
<div class="tested">
<select id="GEO_ZONE_CODE" name="GEO_ZONE_CODE"></select>
</div>
<div class="tested">
@Html.TextBoxFor(m => m.PSITE_ID)
@Html.ValidationMessageFor(m => m.PSITE_ID)
</div>
<div class="Testedagain">
<input type="submit" value="Search" />
</div>
}
控制器
public ActionResult _Psite()
{
if (TempData["values"].ToString() == "value persists")
{
ViewBag.change = true;
// ViewBag.Categories = TempData["EnterUniqueKeyHere"];
// return PartialView("_failValidation");
}
var categories = db1.MN_PSITE.Select(c => new
{
REGION_CODE = c.REGION_CODE,
CategoryName = c.REGION_CODE
}).Distinct().ToList();
ViewBag.Categories = new SelectList(categories, "REGION_CODE", "CategoryName");
ViewBag.error = false;
ViewBag.change = false;
return PartialView();
}
和用于验证数据的控制器在
后面[HttpPost]
public ActionResult _firstGridAll(string REGION_CODE, string GEO_ZONE_CODE, string PSITE_ID)
{
if (ModelState.IsValid == true)
{
Session["username"] = null;
var items = db1.MN_PSITE.Where(x => x.REGION_CODE == REGION_CODE).Where(y => y.GEO_ZONE_CODE == GEO_ZONE_CODE).Where(z => z.PSITE_ID == PSITE_ID);
//db1.MN_PSITE.Where(x => x.REGION_CODE == Region).Where(y => y.GEO_ZONE_CODE == GeoZONE).Where(z => z.PSITE_ID == Psiteid);
foreach (var it in items)
{
Session["username"] = it.PSITE_SLNO.ToString();
return PartialView(items.ToList());
}
if (Session["username"] == null) //validation fails
{
TempData["error"] = "value doesnot exisit,please renter the details";
return RedirectToAction("_Psite");
}
}
//count = 0;
return PartialView(db1.MN_PSITE.ToList());
}
我使用Entityframework生成的类作为模型没有视图视图模式,这里做'db'是实体类的实例
如果你是发布一个视图模型到你的动作,而不是单独的参数,那么你将能够简单地传递该模型返回到你的部分在动作的末尾。
它将只是一个具有几个属性的小类,因此将花费一分钟来创建。这样做。它会给你你想要的。