0

アプリケーションの _layout ビューにドロップダウン リストが含まれています。私がやろうとしているのは、リストにSQLサーバーからのデータを入力し、選択した値に基づいてユーザーを別のビューにリダイレクトすることです。

ユーザーが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 では従来の Web フォームとは異なり、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 に答える