2016-11-10 25 views
0

MVCのプロジェクトでは、1つのページに複数のフォームがありますが、フォームは別々のビューとして区切られています。@ Html.actionsメインビュー。これらのフォームの一部は複雑で、テキストボックスと複数の選択リストがあります。私はこのページを完全に動的にしようとしています。なぜなら、そのページがポストまたはページの変更によってリフレッシュされた場合に、そのような大量のコードがリロードされるからです。メインビューの一部は次のようになります。テキストボックスと複数の選択リストを両方とも動的に扱う方法

    <div class="row" style="height:500px"> 
        <div class="col-lg-3"> 
         <h3>Groups</h3> 
         <ul class="nav nav-pills nav-stacked"> 
          <li><a data-toggle="pill" href="#CreGroup"> Create Group</a></li> 
          <li><a data-toggle="pill" href="#ModGroup"> Modify Group</a></li> 
          <li><a data-toggle="pill" href="#DelGroup"> Delete Group</a></li> 
          <li><a data-toggle="pill" href="#ARGS"> Add or Remove Users/Group from Schedule</a></li> 
         </ul> 
        </div> 

        <div class="container col-lg-8 col-lg-offset-1" style="height:95%;border-radius:70px;border-color:darkblue; border:1px solid"> 
         <div class="tab-content col-lg-offset-1"> 
          <div id="CreGroup" class="tab-pane active"> 
           @Html.Action("CreateGroup", "Home") 
          </div> 
          <div id="ModGroup" class="tab-pane"> 
           @Html.Action("ModifyGroup", "Home") 
          </div> 
          <div id="DelGroup" class="tab-pane"> 
           @Html.Action("DeleteGroup", "Home") 
          </div> 
          <div id="ARGS" class="tab-pane"> 
           @Html.Action("ARGS", "Home") 
          </div> 


         </div> 
        </div> 
       </div> 

私はCreateGroupビュー/フォームに集中したいと思います。このフォームには、グループ名、権限、およびタイプがテキストボックスとして表示されます。また、フォームにグループに入れるユーザーを含む複数選択リストもあります。グループビューを作成するためのコントローラは、次のようになります(とそれの写真下にあるレンダリング)

##CreateGroup## 
<div class="container" style="text-align:center"> 

<div class="row"> 
@using (Html.BeginForm(null, null, FormMethod.Post)) 
{ 
     <h3>Create Group</h3> 

    <div class="col-lg-7"> 
     <div class="row"> 
      <div class="col-lg-6" style="text-align:left"> 
       <br/> 
       <label>Group Name:</label> <br /><br /> 
       <label>Group Type:</label><br /><br /> 
       <label>Group Permissions:</label><br /><br /> 
       <label>Server Name:</label><br /><br /> 
       <label>Server Email:</label><br /><br /> 

      </div> 

      <div class="col-lg-6" style="text-align:right;"> 
       <br/> 
       @Html.TextBox("Gname", "Group Name", new { maxlength = 50 })<br /><br /> 
       @Html.TextBox("Gtype", "Group Type", new { maxlength = 50 })<br /><br /> 
       @Html.TextBox("Gpermission", "Permissions", new { maxlength = 50 })<br /><br /> 

       @Html.TextBox("Gserver", "Server Name", new { maxlength = 50 })<br /><br /> 
       @Html.TextBox("Gemail", "Server Email", new { maxlength = 50 })<br /><br /> 
       <br /> 

      </div> 
     </div> 

    </div> 
    <div class="col-lg-4 col-lg-offset-1"> 
     <label> Select Users for Group: </label> 
     @Html.ListBox("GUsers", ViewBag.Users as MultiSelectList, 
    new { @class = "chzn-select", @style = "width:150px; height:250px" }) 

    </div> 
    } 
</div> 
     <div class="row"> 
      <div class="col-lg-1 col-lg-offset-8"> 
       <button class="btn btn-primary dropdown-toggle" id="Button1" type="button" onclick="group()"> Create Group(s)</button> 

      </div> 
     </div> 

Create Group Rendered View

:今

[HttpGet] 
    public ActionResult CreateGroup() 
    { 
     List<string> u = new List<string>(); 
     object[] users = data.getDataFrmDB("Select username From `users`;"); 
     if (users != null) 
     { 
      foreach (object[] user in users) 
      { 
       u.Add((string)user[0]); 
      } 
     } 
     ViewBag.GUsers = new MultiSelectList(u, "Username"); 
     return View(); 
    } 

ビューは次のようになります

今は、テキストボックスのみのフォームを処理するためにajaxを使用していますが、リストボックスがある場合は機能しないようです。では、ページをリロードしないで、これらの値をすべてコントローラに動的に投稿するにはどうすればよいですか?前もって感謝します。

+0

あなたの質問は、[このSO](コントローラに戻って投稿するリストボックスから値を選択し得ることについてである場合のhttp:コントローラここ

var GnameInput = $("#Gname"); var GserverInput = $("#Gserver"); var GemailInput = $("#Gemail"); var GtypeInput = $("#Gtype"); var GpermInput = $("#GPerm"); var Gusers = $("#GUsers"); function group() { var myList = [] var Gname = GnameInput.val(); var Gserver = GserverInput.val(); var Gemail = GemailInput.val(); var Gtype = GtypeInput.val(); var Gperm = GpermInput.val(); //add all the values to the start of the array myList.push(Gname); myList.push(Gserver); myList.push(Gemail); myList.push(Gtype); myList.push(Gperm); //add all the selected values after $("#GUsers > option:selected").each(function() { myList.push($(this).val()); }); jQuery.ajax({ type: 'post', dataType: 'json', contentType: "application/json; charset=utf-8", url: 'CreateG', data: JSON.stringify(myList), success: function (data) { //remove all of the objects from the list after post $('#GUsers option:contains("' + item + '")').remove(); //confirmation message off success $('#msgCG').html("sucessfully created Group: "+Gname); }, failure: function (errMsg) { $('#msgCG').html(data.msg); } }); return false;// if it's a link to prevent post } 

されています。ここでは

は、JSONの投稿です://stackoverflow.com/questions/28424067/get-a-list-of-the-selected-values-in-a-listbox)が役立つかもしれません。 –

+0

私はそれを行う方法を知っています、私はどのようにマルチ選択リストとテキストボックス@SivaGopal –

答えて

0

私はそれを理解しました。テキストボックスだけの通常のjsonポストのように扱う必要がありますが、ポストされている配列に対して選択されたオブジェクトのリストをタックします。

 [HttpPost] 
    public JsonResult CreateG(List<string> group) 
    { 
     if (group == null) 
     { 
      ///break if the post failed 
     } 
    //assign values base on where they were placed in array and remove after 
     string name = group[0]; 
     group.RemoveAt(0); 
     string server = group[0]; 
     group.RemoveAt(0); 
     string email = group[0]; 
     group.RemoveAt(0); 
     string type = group[0]; 
     group.RemoveAt(0); 
     string perm = group[0]; 
     group.RemoveAt(0); 
//iterate through the remainder of users 
     foreach (string user in group) 
     { 
    //do whatever 
     } 

     return Json(group); 
    } 
関連する問題