在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'是实体类的实例

在Asp.net mvc中,一旦验证失败,如何在控件中维护先前选择的值

如果你是发布一个视图模型到你的动作,而不是单独的参数,那么你将能够简单地传递该模型返回到你的部分在动作的末尾。

它将只是一个具有几个属性的小类,因此将花费一分钟来创建。这样做。它会给你你想要的。