0

我的应用程序的 _layout 视图中包含一个下拉列表。我想要做的是用来自 sql server 的数据填充列表,然后根据选择的值将用户重定向到另一个视图。

一切正常,除了当用户单击 Enter/Search 时,下拉列表的值默认为第一个值。由于我目前正在从 Web 表单过渡,这非常困难且令人沮丧。

这是我的模型的代码

                 public class DomainNameViewModel
{
    private static readonly string ConStr = WebConfigurationManager.ConnectionStrings["App"].ConnectionString.ToString();


    public string SelectedDomainId { get; set; }

    public IEnumerable<SelectListItem> domains
    {
        get
        {

            List<SelectListItem> l = new List<SelectListItem>();
            using (SqlConnection con = new SqlConnection(ConStr))
            {
                SqlCommand com = new SqlCommand("spDomainList", con);
                con.Open();
                SqlDataReader sdr = com.ExecuteReader();
                while (sdr.Read())
                {
                    l.Add(new SelectListItem() { Text = sdr[0].ToString(), Value = sdr[1].ToString() });
                }

                return l;
            }

        }

控制器代码。

     [ChildActionOnly]
    public ActionResult Index()
    {


        return PartialView(new DomainNameViewModel());
    }

域名视图

            @model app.Models.DomainNameViewModel

          @{
  Layout = null;
   }

          @Html.DropDownListFor(x => x.SelectedDomainId, Model.domains, new { @id   = "e1",@class = "bannerlist" })

_Layout 视图的代码

                   @using (Html.BeginForm("Search","DomainSearch",FormMethod.Get))
    {
    @Html.TextBox("txtDomain", null, new { @class = "bannertextbox" , placeholder="Search for a Perfect Domain!" })
 @Html.Action("index","DomainName")
    <input type="submit" class="bannerbutton" value="Search" />
    }

任何帮助,将不胜感激。

编辑:添加了 DomainSearchController 代码。

    public class DomainSearchController : Controller
{
    //
    // GET: /DomainSearch/

    public ActionResult Search(string txtDomain,string SelectedDomainId)
    {
        DomainNameViewModel Domain = new DomainNameViewModel();
        Domain.SelectedDomainId = SelectedDomainId;
       string check = Domain.ParseDomain(HttpUtility.HtmlEncode(txtDomain), HttpUtility.HtmlEncode(SelectedDomainId));

        string s = Domain.CheckDomains(check);
        ViewBag.Domain = Domain.DomainCheckResult(s);
        return View();
    }

}
4

1 回答 1

0

您还没有完全展示/解释您是如何执行重定向的。但是您需要将查询字符串中的选定值传递给目标页面,或者存储在 cookie 中或服务器上的某个位置,例如 ASP.NET 会话 (beurk)。

您需要这样做的原因是因为在 ASP.NET MVC 中,与经典的 WebForms 不同,没有 ViewState,并且您无法在后续的 PostBack 中检索选定的值(在 ASP.NET MVC 中没有 PostBack 这样的概念)。

然后在您的子控制器操作中,您将需要从查询字符串、cookie 或 ASP.NET 会话 (beurk) 中检索选定的值,并将SelectedDomainId视图模型上的属性设置为该值。

例如:

[ChildActionOnly]
public ActionResult Index()
{
    var model = new DomainNameViewModel();
    // here you need to set the SelectedDomainId property on your view model
    // to which the dropdown is bound to the selected value
    model.SelectedDomainId = Request["domain_id"];
    return PartialView(model);
}

假设您决定在重定向时将此值作为查询字符串参数传递,您将需要在后续重定向中保留此参数以保持状态。

于 2013-06-14T15:04:12.147 回答