2週間前に同様の質問を投稿しましたが、デバッグに問題が発生していました。 @Stephen Mueckeに感謝してくれてありがとう。私は以下のように、問題の後半に何の牽引力もないので、転記しています。viewmodelリストに文字列値を挿入する
membertypeに基づいて企業の一覧を表示するサイト関数で作業していますが、C#でリストがどのように構築されているかという問題が発生しています。コードをテストすると、処理されない例外エラーが発生し、デバッグはリストが空であることを示します。ここで
はviewmodelのである:ここでは
public class MemberListViewModel
{
public List<string> MemberList { get; set; }
public string MemberType { get; set; }
}
は、コントローラのコードです:
public class MemberListController : Controller
{
public ActionResult MemberList()
{
return PartialView(PrepareMemberListViewModel());
}
private MemberListViewModel PrepareMemberListViewModel()
{
MemberListViewModel viewModel = new MemberListViewModel();
string orgType = "Distributor"; //TODO: hardcoded for dev
DataTable table = new DataTable();
using (var connection = new SqlConnection("Provider=SQLOLEDB;Data Source=db.site.net;Persist Security Info=True;Initial Catalog=DB;User ID=SA;Password=PW"))
{
connection.Open();
if (orgType == "Manufacturer")
{
using (var command = new SqlCommand("SELECT Member FROM dbo.view WHERE [Member Type] = 'Manufacturer' and [Member Code] <> 'Associate - HBW'", connection))
table.Load(command.ExecuteReader());
}
else if (orgType == "HBW")
{
using (var command = new SqlCommand("SELECT Member FROM dbo.view WHERE [Member Type] = 'Manufacturer' and [Member Code] = 'Associate - HBW'", connection))
table.Load(command.ExecuteReader());
}
else
{
using (var command = new SqlCommand("SELECT Member FROM dbo.view WHERE [Member Type] = '" + orgType + "'", connection))
table.Load(command.ExecuteReader());
}
connection.Close();
}
for (int i = 0; i < table.Rows.Count; i++)
{
string memberName = table.Rows[i]["Member"].ToString();
viewModel.MemberList.Add(memberName);
}
return viewModel;
}
}
私はデバッグするとき、我々はそのラインで
viewModel.MemberList.Add(memberName);
に到達するまで、すべてがスムーズに実行しますviewModel.Memberlistのローカル値は、頑強にnullのままです。私はテーブルに値があることを確認しました - この場合、35行、会社名で。
私は何かシンプルなものを紛失していることを知っていますが、それは何であるか分かりません。前もって感謝します!
あなたのリストをインスタンス化したことはありません。 – Fran
MemberListのインスタンス化 – Atul
クラスのコンストラクタのリストプロパティをインスタンス化して、ヌルリストにアクセスしないようにすることをお勧めします。 – Fran