我有一个下拉列表,它包含在我的应用程序的_layout视图中。 我想要做的是使用来自SQL Server的数据填充列表,然后根据选择的值将用户重定向到另一个视图。
一切正常,但当用户点击Enter / Search时,dropdownlist的值默认为第一个值。由于我目前正在从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();
}
}
答案 0 :(得分:0)
您尚未完全展示/解释您是如何进行重定向的。但是您需要将查询字符串中的选定值传递给目标页面,或者存储在cookie中或服务器上的某个位置,就像在ASP.NET会话中一样(beurk)。
你需要这样做的原因是因为在ASP.NET MVC中,与传统的WebForms相反,没有ViewState,你无法在后续的PostBack上检索所选的值(在ASP.NET MVC中既没有像PostBack这样的概念)。 / p>
然后在您的子控制器操作中,您需要从查询字符串或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);
}
假设您决定在重定向时将此值作为查询字符串参数传递,则需要将此参数保留在后续重定向上以保持状态。