![](/img/trans.png)
[英]how to return multiple selected values in a controller in ASP.NET MVC
[英]ASP.Net MVC multiple list return from Controller
我正在使用mvc4剃須刀,這是第一個模型代碼
public class WebLicenses
{
public string WebLicenseName { get; set; }
public int CustomerWebLicensesCount { get; set; }
}
public class WebApplication
{
public string WebApplicationName { get; set; }
public int Count { get; set; }
[DisplayFormat(DataFormatString = "{0:dd.MM.yyyy}")]
public DateTime? EndDate { get; set; }
public string Never { get; set; }
}
public class griddetail
{
public griddetail( List<WebLicenses> wl1,List<WebApplication> wa1 )
{
wl =wl1;
wa = wa1;
}
//public List<WebLicenses> wl2 { get; private set; }
public List<WebLicenses> wl { get; set; }
public List<WebApplication> wa { get; set; }
}
這是我的第二個模型代碼,它使用第一個模型代碼作為(這里存儲過程返回2表-WebLicenses,WebApplication(下面的代碼錯誤--commented)
public IEnumerable GetOutlookGridDetail(string customerId = "")
{
List<WebLicenses> weblicenses = new List<WebLicenses>();
List<WebApplication> webapplication = new List<WebApplication>();
griddetail returnValue = new griddetail(weblicenses, webapplication);
SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["SLIMConnectionString"].ConnectionString);
SqlCommand cmd = new SqlCommand("selectCustomerDetail", cn);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter param_CustomerID = new SqlParameter("@CustomerID", SqlDbType.VarChar, 10);
param_CustomerID.Value = customerId;
cmd.Parameters.Add(param_CustomerID);
try
{
cn.Open();
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
WebLicenses newRecord = new WebLicenses();
newRecord.WebLicenseName = Convert.ToString(reader["WebLicenseName"]);
newRecord.CustomerWebLicensesCount = Convert.ToInt32(reader["CustomerWebLicensesCount"]);
//returnValue.Add(newRecord);
weblicenses.Add(newRecord);
}
reader.NextResult();
while (reader.Read())
{
WebApplication newRecord = new WebApplication();
newRecord.WebApplicationName = Convert.ToString(reader["WebApplicationName"]);
newRecord.Count = Convert.ToInt32(reader["Count"]);
newRecord.Never = Convert.ToString(reader["Never"]);
webapplication.Add(newRecord);
}
returnValue.wl.Add(weblicenses); //here comes error (Argument 1: cannot convert from 'System.Collections.Generic.List<SLIM.Models.WebLicenses>' to 'SLIM.Models.WebLicenses')
}
catch (Exception)
{
// returnValue = null;
}
finally
{
cmd.Dispose();
if (cn.State == ConnectionState.Open)
{
cn.Close();
}
}
return returnValue;
}
這是我的控制器代碼。
[HttpPost]
public ActionResult GridViewPartialView(string recordId)
{
IEnumerable result1 = (new SlimHomePageData()).GetRecords(recordId, "");
IEnumerable result2 = (new SlimHomePageData()).GetRecords();
List<object> finalResult = new List<object>();
finalResult.Add(result1);
finalResult.Add(result2);
return PartialView("OutlookGridDetail", finalResult);
}
我想返回一個包含2個列表的列表(但出現上述錯誤)。 還建議“這種方法正確嗎,因為存儲過程返回多個表,我們希望通過模型在視圖中設置值”。
我忘了回答,但是昨天有人給了我零下的票。 是的,時間太長。 我做了什么(我再次解釋了所有內容以進一步了解):
步驟1:將2類定義為
public class WebLicenses
{
public int WebLicenseID { get; set; }
public string WebLicenseName { get; set; }
public int CustomerWebLicensesCount { get; set; }
public string CreatedBy { get; set; }
public string UpdatedBy { get; set; }
}
public class WebApplication
{
public int appID { get; set; }
public string WebApplicationName { get; set; }
public int Count { get; set; }
[DisplayFormat(DataFormatString = "{0:dd.MM.yyyy}")]
public DateTime? EndDate { get; set; }
public bool Never { get; set; }
public string CreatedBy { get; set; }
public string UpdatedBy { get; set; }
}
public class griddetail
{
public griddetail(List<WebLicenses> wl1, List<WebApplication> wa1)
{
weblicences = wl1;
webapplication = wa1;
}
public List<WebLicenses> weblicences { get; set; }
public List<WebApplication> webapplication { get; set; }
}
步驟2:將控制器更改為
IEnumerable
更改為griddetail
類 最后聲明並在griddetail
類中分配此嵌套類
public class SlimHomePageData { private SLIMDataContext dc = new SLIMDataContext(ConfigurationManager.ConnectionStrings["SLIMConnectionString"].ConnectionString); . . . public IEnumerable GetOutlookGridDetail(string customerId = "") { List<WebLicenses> weblicenses = new List<WebLicenses>(); List<WebApplication> webapplication = new List<WebApplication>(); //remove from here and add at the end of this method //griddetail returnValue = new griddetail(weblicenses, webapplication); SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["SLIMConnectionString"].ConnectionString); SqlCommand cmd = new SqlCommand("selectCustomerDetail", cn); cmd.CommandType = CommandType.StoredProcedure; SqlParameter param_CustomerID = new SqlParameter("@CustomerID", SqlDbType.VarChar, 10); param_CustomerID.Value = customerId; cmd.Parameters.Add(param_CustomerID); try { cn.Open(); SqlDataReader reader = cmd.ExecuteReader(); if (reader.HasRows) { while (reader.Read()) { WebLicenses newRecord = new WebLicenses(); newRecord.WebLicenseName = Convert.ToString(reader["WebLicenseName"]); newRecord.CustomerWebLicensesCount = Convert.ToInt32(reader["CustomerWebLicensesCount"]); weblicenses.Add(newRecord); } } reader.NextResult(); if (reader.HasRows) { while (reader.Read()) { WebApplication newRecord = new WebApplication(); newRecord.WebApplicationName = Convert.ToString(reader["WebApplicationName"]); newRecord.Count = Convert.ToInt32(reader["Count"]); bool never = false; if (reader["Never"] != DBNull.Value) { bool.TryParse(reader["Never"].ToString(), out never); } if (reader["EndDate"] != DBNull.Value) { newRecord.EndDate = Convert.ToDateTime(reader["EndDate"]); } newRecord.Never = never; webapplication.Add(newRecord); } } reader.Close(); } catch (Exception) { // returnValue = null; } finally { cmd.Dispose(); if (cn.State == ConnectionState.Open) { cn.Close(); } } griddetail returnValue = new griddetail(weblicenses, webapplication, webcustomapplication, maintenance, smartcv, histry, doc); return returnValue; } . . }//closing of my SlimHomePageData class
**步驟3:**在ActionMethod中更改為:發布此問題后,我在方法中進行了更改,但是您可以在上述問題中使用相同的方法概念。 稍后我需要另一個類在返回時添加result1
。
public ActionResult GridViewPartialView()
{
return View();
}
[HttpPost]
public ActionResult childGridViewPartialView(string recordId, string filtervalue, string flag)
{
if (flag == "GridRowChanged")
{
IEnumerable result1;
griddetail result3;
if (recordId != null)
{
result1 = (new SlimHomePageData()).GetRecords(recordId, ""); //another result to be add later at the end of action method
result3 = (new SlimHomePageData()).GetOutlookGridDetail(recordId); //this was in my question
}
else
{
result1 = new List<SlimHomePageRecord>(); //another result to be add later at the end of action method
result3 = (new SlimHomePageData()).GetOutlookGridDetail(recordId); //this was in my question
}
List<object> finalResult = new List<object>();
finalResult.Add(result1);
finalResult.Add(result3);
return PartialView("OutlookGridDetail", finalResult);
}
else
{
return PartialView("childGridViewPartialView", (new SlimHomePageData()).GetRecords(null, null));
}
}
實例weblicenses是列表類型。 看起來它應該是WebLicenses的單個實例。
您可能想要將newRecord實例添加到returnValue.wl列表中,而不是列表實例中。
編輯:您不需要將任何內容添加到wl列表屬性,因為您要添加到WebLicenses列表。 returnValue上的屬性wl是對WebLicences實例的引用,因此,如果將其添加到WebLicences,則wl將顯示相同的添加內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.