ダイナミックに生成されたテキストボックス入力を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>
インデックススクリーンショット:ステファン・ミュエッケに
'foreach'ループを使用してコレクションアイテムのフォームコントロールを生成することはできません。あなたは 'for'ループを使うか、' Demand'の型のためにカスタム 'EditorTemplate'を使う必要があります - [this answer](http://stackoverflow.com/questions/30094047/html-table-to-ado- net-datatable/30094943#30094943) –
私はデータを送信することができました。ありがとうございました –