在 asp.net mvc 中回发后保留文本框和下拉列表值

retain text box and dropdown list values after postback in asp.net mvc

如何在 asp.net 中提交数据后获取旧值 MVC.i 是 MVC 的新东西 我阅读了很多文章来达到这个结果,我的问题是在单击搜索按钮后我丢失了所有值在文本框和下拉列表中。

这是我的 view.cshtml 页面

 @using (Html.BeginForm("Index", "Home", FormMethod.Post))
     {
       <input class="calendarr font" name="Arrival" value="@Request["Arrival"]" readonly type="text" id="Arrival"  onchange="changedDate()">

       <input class="calendarr font" name="Departure" value="@Request["Departure"]" readonly type="text" id="Departure" >

             <select id="Rooms" name="Rooms" class="dropdown">
                 @for (int i = 1; i <= Model.MaximumNumberOfRooms; i++)
                     {
                        <option value="@i @Request["Rooms"]">@i</option>
                            }
                        </select>


                 <select id="Persons" name="Persons" class="dropdown">
                            @for (int j = 1; j <= Model.MaximumNumberOfAdultsPerRoom; j++)
                            {
                                <option value="@j  @Request["Persons"]">@j</option>
                            }
                        </select>                          
                <select id="Childrens" name="Childrens" class="dropdown">
                            @for (int c = 1; c <= Model.MaximumNumberOfChildrenPerRoom; c++)
                            {
                                <option value="@c @Request["Childrens"]">@c</option>
                            }
                        </select>

              <input type="submit" class="btns" value="Search" />

     }

以及 HomeController 中的以下代码。

 public class HomeController : Controller
    {
        SessionHelper mysession = new SessionHelper();
      
        [HttpPost]
        [ActionName("Index")]
        public ActionResult Index_Post()
        {                                            
            return View();
        }

        [HttpGet]
        [ActionName("Index")]
        public ActionResult Index_Get()
        {
            checkURL();
            pageload();
            string arrival = Request.Form["Arrival"];
            string Departure = Request.Form["Departure"];
            string rooms = Request.Form["Rooms"];
            string Persons = Request.Form["Persons"];
            string Childrens = Request.Form["Childrens"];
            return View(mysession);
        }
}

谢谢。

ASP.MVC中没有"PostBack"这样的东西。但是,这里有一个简单的方法:

  1. 由于您发送的参数不是敏感的或数据库更改的,因此将您的表单设置为 FormMethod.Get 而不是 FormMethod.Post:[=13= 更合适]

    @using (Html.BeginForm("Index", "Home", FormMethod.Get))
    
  2. 在您的 Index_Get 操作中,输入如下内容:

        public class HomeController : Controller
        {
            SessionHelper mysession = new SessionHelper();
    
    
            [HttpGet]
            [ActionName("Index")]
            public ActionResult Index_Get(string Arrival, string Departure, string Rooms, string Persons, string Childrens,  )
            {
                checkURL();
                pageload();
                ViewBag.Arrival = Arrival;
                ViewBag.Departure = Departure;
                ViewBag.Rooms = Rooms;
                ViewBag.Persons = Persons;
                ViewBag.Childrens = Childrens;
                return View(mysession);
            }
    }
    

只要您输入的 name 作为参数存在于 Index_Get 参数中,该参数将自动填充,无需调用 Request 对象。您还可以将参数类型从字符串更改为任何数据类型。但是,请注意其他数据类型不接受空值,除非您将它们定义为可为空。

  1. 在您的 html 上将每个字段值更改为 ViewBag 对象,例如:

    value="@ViewBag.Arrival"

希望这对您有所帮助:)