1

ある種のフォームを作成したページがあります。2つのドロップダウンリスト(プロファイルリストと給与リスト)があります。

このフォームには3つのテキストボックスがあります。私がやりたいこと:

新しいプロファイルと新しいsalarygroupを作成し、新しいプロファイルがプロフィリストに追加され、salarygroupがsalarylistに追加される2つのボックスがあります。

ここで、サラリリスとプロフィリストの両方のアイテムが選択されるまで、3番目のボックスを無効にします。アイテムを選択したら、テキストボックスを有効にする必要があります。

私の見解:

@model KUMA.Models.EmployeeCardAdminModel

@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<div class="row bgwhite">
    <div class="twelve columns">
        <h2>Administration KUMA</h2>
        <div class="row bgwhite">@using (Html.BeginForm("Index", "Admin"))                   
           {
               <div class="three columns">
                   @Html.DropDownList("UserId", (SelectList)ViewBag.UserId, "--Välj anställd--") 
               </div>
               <div class="three columns" style="margin-right:457px !important;">
                    @Html.DropDownList("Salaryid", (SelectList)ViewBag.Salaryid, "--Välj LöneGrupp--")
                   <input style="float:left;" type="submit" value="Knyt" />
               </div>
           }

            @using (Html.BeginForm("Kompetens", "KumaAdmin"))
            {  
                <div class="three columns" style="margin-right: 627px;">
                    <h6>Kompetenser</h6>
                    <div style="width:456px;"> @Html.ListBox("kompetensId", (SelectList)ViewBag.KomId, new { placeholder = "Kompetenser" })</div><br/>
                    @Html.TextBoxFor(mm => mm.Kompetens, new { placeholder = "Ange Kompetens" })
                  @*@Html.TextBoxFor(mm => mm.KompetensTest, new { placeholder = "Kompetens" })
                    @Html.TextAreaFor(mm => mm.KompetensTest, new { placeholder = "Kompetens", rows="5", cols="80" })*@
                    <input type="submit" style="margin-right: 205px;" value="Skapa"/><br/><br/>
                </div>
             }
                 @using (Html.BeginForm("Index", "KumaAdmin"))
                 {
                     <div class="three columns" style="margin-right: 627px;">
                         @* <input  name="profileTxtBox"type="text" style="width:97px; height:28px;" value="" />*@
                         @Html.TextBoxFor(mm => mm.Profile, new { placeholder = "Ange Profil" })                    
                         @Html.TextBoxFor(mm => mm.SalaryGroup, new { placeholder = "Ange LöneGrupp" })
                         <input type="submit" value="Skapa"/>
                     </div>
                 }
           @*    <div class="one columns" style=" margin-left: 100px;margin-right: 164px; margin-top: -33px;">
                 <input  name="profileTxtBox"type="submit" style="width:100px;" value="Add" />
            </div>*@
            <div class="five columns"></div>
        </div>
    </div

>>

コントローラ:

 public class AAdminController : Controller
    {
        static List<Employee> list = new List<Employee>();
        //EmployeeCardAdminModel employee = new EmployeeCardAdminModel();
        //
        // GET: /Admin/
        //[Authorize(Roles = "Admin")]

        [HttpGet]
        public ActionResult Index()
        {
            ViewBag.UserId = new SelectList(list, "Id", "Profile");
            ViewBag.Salaryid = new SelectList(list, "Id", "SalaryGroup");
            ViewBag.KomId = new SelectList(list, "Id", "Kompetens");


            ModelState.Clear();

            return View("Index");   
        }

        [HttpPost]
        // submit for profile & salary box
        public ActionResult Index(Models.EmployeeCardAdminModel e)
        {
            if (string.IsNullOrEmpty(e.Profile) == false && string.IsNullOrEmpty(e.SalaryGroup) == false)
            {
                // adda a new employye to the list and set the values from the parameter to the model
                list.Add(new Employee
                    {
                        Id = e.Id + 1,
                        Profile = e.Profile,
                        SalaryGroup = e.SalaryGroup
                    });
            }
            return (Index());
        }

        [HttpPost]
        // submit for knowledge box
        public ActionResult Kompetens(Models.EmployeeCardAdminModel e)
        {
            if (string.IsNullOrEmpty(e.Kompetens) == false)
            {
                // adda a new employye to the list and set the values from the parameter to the model
                list.Add(new Employee
                {
                    Kompetens = e.Kompetens
                });
            }
            return (Index());
        }

そして最後に私のモデル(emplyeeクラスは私のモデルと同じであり、同じプロパティを持っていることに注意してください。ただし、ベストプラクティスとしては、これらを分離するのが最善です。):

 public class EmployeeCardAdminModel
    {

        public string Profile { get; set; }
        public int Id  { get; set; }
        public string SalaryGroup { get; set; }
        public string Kompetens { get; set; }

    }

私が通常これを行う方法は、目的のリストを呼び出して、選択したインデックスがnullより大きいかどうかを確認することですが、問題は、コントローラーからリストに正しい方法でアクセスする方法がわからないため、その中のアイテム。また、テキストボックスでIDを取得するにはどうすればよいですか?正しいテキストボックスを無効/有効にするには、これが必要です。

私はMVCにかなり慣れていません。プロジェクトを行うことで学ぶので、すべてのアドバイスをいただければ幸いです。

ありがとうございました!

4

1 に答える 1

1

しばらくして、スクリプトなしでこれを行う良い方法がないことに気づきました。

だから私はこのようにjqueryでそれを解決しました:

$(function () {

    $(".list select").change(function () {
        if ($(".list1 select").val().length == 0 || $(".list2 select").val().length == 0) {

            $(".kompetensbox input").attr('disabled', 'disabled');
        }

        else {
            $(".kompetensbox input").removeAttr('disabled');
        }
    })
});

ビューの変更(cssクラスの追加):

       <div class="three columns list list1">
           @Html.DropDownList("UserId", (SelectList)ViewBag.UserId, "--Välj profilgrupp--") 
       </div>
       <div class="three columns list list2" style="margin-right:457px !important;">
            @Html.DropDownList("Salaryid", (SelectList)ViewBag.Salaryid, "--Välj LöneGrupp--")
           <input style="float:left;" type="submit" value="Knyt" />
       </div>

それが同じことを試みる他の人を助けることを願っています。

于 2013-02-25T12:05:51.870 に答える