Asp.net mvc 如何在表单提交时将复选框值传递给控制器,然后将数据返回视图?
在我的视图中,我在一些用户记录前面放置了一个复选框。当我选中一个复选框并单击提交按钮时,选中的复选框值(用户Id)将发送到控制器。目前,我成功地在我的模型中获取电子邮件,但无法将DB结果恢复到视图中 客户视图:Asp.net mvc 如何在表单提交时将复选框值传递给控制器,然后将数据返回视图?,asp.net-mvc,post,razor,asp.net-mvc-5,Asp.net Mvc,Post,Razor,Asp.net Mvc 5,在我的视图中,我在一些用户记录前面放置了一个复选框。当我选中一个复选框并单击提交按钮时,选中的复选框值(用户Id)将发送到控制器。目前,我成功地在我的模型中获取电子邮件,但无法将DB结果恢复到视图中 客户视图: @using (Html.BeginForm()) { <table class="table table-responsive"> @foreach (var s in Model) { <td id="list"><input type="c
@using (Html.BeginForm())
{
<table class="table table-responsive">
@foreach (var s in Model)
{
<td id="list"><input type="checkbox" name="ids" id="ids" value="@s.Id" /></td>
}
<tr>
<td><button class="btn btn-primary" id="sendmail" type="submit">Send Email To Customers</button></td>
</tr>
</table>
}
@if (TempData["Emails"] != null)
{
<span class="alert-info">@TempData["Emails"]</span>
}
public Customers GetEmails(int[] ids)
{
Customers ee = new Customers();
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["mvc"].ConnectionString);
string qry = "select Email from users where Id IN(" + string.Join(",", ids.ToArray()) + ")";
SqlCommand cmdd = new SqlCommand(qry, con);
con.Open();
SqlDataReader rdd = cmdd.ExecuteReader();
while (rdd.Read())
{
ee.Email = rdd["Email"].ToString(); // I am able to get all emails
}
rdd.Close();
cmdd.ExecuteNonQuery();
con.Close();
return ee;
}
型号:
@using (Html.BeginForm())
{
<table class="table table-responsive">
@foreach (var s in Model)
{
<td id="list"><input type="checkbox" name="ids" id="ids" value="@s.Id" /></td>
}
<tr>
<td><button class="btn btn-primary" id="sendmail" type="submit">Send Email To Customers</button></td>
</tr>
</table>
}
@if (TempData["Emails"] != null)
{
<span class="alert-info">@TempData["Emails"]</span>
}
public Customers GetEmails(int[] ids)
{
Customers ee = new Customers();
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["mvc"].ConnectionString);
string qry = "select Email from users where Id IN(" + string.Join(",", ids.ToArray()) + ")";
SqlCommand cmdd = new SqlCommand(qry, con);
con.Open();
SqlDataReader rdd = cmdd.ExecuteReader();
while (rdd.Read())
{
ee.Email = rdd["Email"].ToString(); // I am able to get all emails
}
rdd.Close();
cmdd.ExecuteNonQuery();
con.Close();
return ee;
}
让我们从一些虚拟数据和测试用例场景开始
public ActionResult Test()
{
return View();
}
[HttpPost]
public ActionResult Test(MyModel model)
{
TempData["test"] = GetData();
return View();
}
public List<string> GetData() //method for get data
{
List<string> mylist = new List<string>(new string[] { "element1", "element2", "element3" });
return mylist;
}
公共操作结果测试()
{
返回视图();
}
[HttpPost]
公共行动结果测试(MyModel)
{
TempData[“test”]=GetData();
返回视图();
}
public List GetData()//获取数据的方法
{
List mylist=新列表(新字符串[]{“element1”、“element2”、“element3”});
返回mylist;
}
和剃刀视图
var data = TempData["test"] as List<string>;
if (data != null)
{
foreach (var a in data)
{
WriteLiteral(@"<li>"); /**/
Write(a); /**/
WriteLiteral(@"</li>");
}
}
var data=TempData[“测试”]作为列表;
如果(数据!=null)
{
foreach(数据中的var a)
{
W文字(@“”)/**/
W仪式(a)/**/
W文字(@“ ”);
}
}
现在在您的场景中,我假设您的GetEmail
只返回一组字符串,因此将您的返回类型更改为Customer对象,将其更改为list
aspublic list GetEmails()
并将其返回为字符串列表
然后,您需要在razor视图中执行的所有操作都类似于测试用例场景。好吧,让我们从一些虚拟数据和测试用例场景开始
public ActionResult Test()
{
return View();
}
[HttpPost]
public ActionResult Test(MyModel model)
{
TempData["test"] = GetData();
return View();
}
public List<string> GetData() //method for get data
{
List<string> mylist = new List<string>(new string[] { "element1", "element2", "element3" });
return mylist;
}
公共操作结果测试()
{
返回视图();
}
[HttpPost]
公共行动结果测试(MyModel)
{
TempData[“test”]=GetData();
返回视图();
}
public List GetData()//获取数据的方法
{
List mylist=新列表(新字符串[]{“element1”、“element2”、“element3”});
返回mylist;
}
和剃刀视图
var data = TempData["test"] as List<string>;
if (data != null)
{
foreach (var a in data)
{
WriteLiteral(@"<li>"); /**/
Write(a); /**/
WriteLiteral(@"</li>");
}
}
var data=TempData[“测试”]作为列表;
如果(数据!=null)
{
foreach(数据中的var a)
{
W文字(@“”)/**/
W仪式(a)/**/
W文字(@“ ”);
}
}
现在在您的场景中,我假设您的GetEmail
只返回一组字符串,因此将您的返回类型更改为Customer对象,将其更改为list
aspublic list GetEmails()
并将其返回为字符串列表
然后,您需要在类似razor视图的测试用例场景中执行的所有操作。我建议使用表值参数,而不是像那样构建字符串(这是一种易受sql注入攻击的模式)。使用它更容易、更安全。我会更改代码,现在只是本地测试,谢谢。所以基本上你的get(view)方法需要email值,不是吗?@ZiaulKabirFahad email values based selected id'sis now
public Customers getemail(int[]ids)
基于ID返回电子邮件?我建议使用表值参数,而不是像那样构建字符串(这是一种易受sql注入攻击的模式)。使用它更容易、更安全。我会更改代码,现在只是本地测试,谢谢。所以基本上你的get(view)方法需要email值,不是吗?@ZiaulKabirFahad email values based selected id's nowpublic Customers getemail(int[]ids)
基于ids返回电子邮件?返回列表;对我来说,一起处理这些电子邮件更容易。谢谢:)返回列表;对我来说,一起处理这些电子邮件更容易。谢谢:)