2016-08-29 3 views
0

ダイナミックに生成されたテキストボックス入力をMVC5のコントローラに渡す最良の方法は何ですか?コントローラに動的に生成されるモデルの投稿リスト

私はこの問題をアーカイブしようとしていますが、私は固執しています。私はWeb.configファイルから自分のデータを読み込み、そのデータをモデルにバインドしています。このモデルはDemandとして呼び出し、インデックスに送信してユーザーに表示します。ユーザーはコントローラへの入力と再送信を変更してAppSettingsを変更します。私の問題は、Html.TextBoxForのようなMVC5機能を使用してユーザーからデータを取得する方法ですが、どうすれば自分自身に実装できるのか理解できませんでした。私はコントローラのChangeConfig機能にデータをプッシュしようとしています。誰かがインデックスに私を助けて、彼/彼女が何をしたのかを説明すれば、私は喜ぶでしょう。

Web.Configファイル:

<add key="DefaultDemands" value="Always:ASG_Live_XXXXX:-1:4:13:-1:6:13:-1:2:13:-1:2:13;Always:ASG_Live_YYYY:-1:4:27:-1:12:27:-1:2:27:-1:2:27 /> 

モデル:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace InstanceScheduler.Models 
{ 
    public class Demand 
    { 
     public string AutoScalingGroupName { get; set; } 

     public string Type { get; set; } 

     public int Normal_ScaleUP_DesiredCapacity { get; set; } 
     public int Normal_ScaleUP_MinSize { get; set; } 
     public int Normal_ScaleUP_MaxSize { get; set; } 
     public int Derby_ScaleUP_DesiredCapacity { get; set; } 
     public int Derby_ScaleUP_MinSize { get; set; } 
     public int Derby_ScaleUP_MaxSize { get; set; } 

     public int Normal_ScaleDOWN_DesiredCapacity { get; set; } 
     public int Normal_ScaleDOWN_MinSize { get; set; } 
     public int Normal_ScaleDOWN_MaxSize { get; set; } 
     public int Derby_ScaleDOWN_DesiredCapacity { get; set; } 
     public int Derby_ScaleDOWN_MinSize { get; set; } 
     public int Derby_ScaleDOWN_MaxSize { get; set; } 
    } 
} 

コントローラー:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 

using System.Configuration; 
using InstanceScheduler.Models; 

namespace InstanceScheduler.Controllers 
{ 
    public class AdminController : Controller 
    { 
     // GET: Admin 
     public ActionResult Index() 
     { 
      string _configDemandsString = ConfigurationManager.AppSettings["DefaultDemands"]; 
      List<Demand> _demandList = new List<Demand>(); 
      foreach (var _demandString in _configDemandsString.Split(';')) 
      { 
       var _parseDemandString = _demandString.Split(':'); 
       _demandList.Add(new Demand 
       { 
        Type = _parseDemandString[0], 
        AutoScalingGroupName = _parseDemandString[1], 
        Normal_ScaleUP_DesiredCapacity = int.Parse(_parseDemandString[2]), 
        Normal_ScaleUP_MinSize = int.Parse(_parseDemandString[3]), 
        Normal_ScaleUP_MaxSize = int.Parse(_parseDemandString[4]), 
        Derby_ScaleUP_DesiredCapacity = int.Parse(_parseDemandString[5]), 
        Derby_ScaleUP_MinSize = int.Parse(_parseDemandString[6]), 
        Derby_ScaleUP_MaxSize = int.Parse(_parseDemandString[7]), 
        Normal_ScaleDOWN_DesiredCapacity = int.Parse(_parseDemandString[8]), 
        Normal_ScaleDOWN_MinSize = int.Parse(_parseDemandString[9]), 
        Normal_ScaleDOWN_MaxSize = int.Parse(_parseDemandString[10]), 
        Derby_ScaleDOWN_DesiredCapacity = int.Parse(_parseDemandString[11]), 
        Derby_ScaleDOWN_MinSize = int.Parse(_parseDemandString[12]), 
        Derby_ScaleDOWN_MaxSize = int.Parse(_parseDemandString[13]) 
       }); 
      } 

      return View(_demandList); 
     } 

     public string ChangeConfig(List<Demand> _demands) 
     { 
      return string.Join(",", _demands.Select(q => q.AutoScalingGroupName)); 
     } 
    } 
} 

インデックスコードの表示:

@model List<InstanceScheduler.Models.Demand> 

<div class="container-fluid"> 
    <form action="@Url.Action("ChangeConfig","Admin")"> 
     @{ 
      foreach (var _demand in Model) 
      { 
       foreach (var _variable in new InstanceScheduler.Models.Demand().GetType().GetProperties()) 
       { 
        <div class="row"> 
         @_variable.Name: <input value="@typeof(InstanceScheduler.Models.Demand).GetProperty(_variable.Name).GetValue(_demand)" /> 
        </div> 
       } 
       <br /> 
       <br /> 
      } 
     } 
     <button class="btn btn-primary" type="submit">Submit</button> 
    </form> 
</div> 

インデックススクリーンショット:ステファン・ミュエッケに

Index Screenshot

+0

'foreach'ループを使用してコレクションアイテムのフォームコントロールを生成することはできません。あなたは 'for'ループを使うか、' Demand'の型のためにカスタム 'EditorTemplate'を使う必要があります - [this answer](http://stackoverflow.com/questions/30094047/html-table-to-ado- net-datatable/30094943#30094943) –

+0

私はデータを送信することができました。ありがとうございました –

答えて

0

感謝。私はデータをコントローラに送るのに成功しました。コメント内のリンクを確認することができます。

関連する問題