Как передать значение флажка на контроллер формы, а затем вернуть данные для просмотра? - PullRequest
0 голосов
/ 03 октября 2018

На мой взгляд, я поставил флажок перед некоторыми записями пользователей. Когда я установил флажок и нажал кнопку отправки, выбранные значения флажков ( идентификатор пользователя ) будут отправлены на контроллер,в настоящее время я успешно получаю электронные письма в моей модели, но не могу получить результат БД в поле зрения.

Просмотр клиентов:

@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>
}

Контроллер:

    [HttpPost]
    public ActionResult Customers(int[] ids)
    {
        Customers cu= new Customers();
        cu.IDS = ids;
        cu.GetEmails(ids);
        TempData["ids"] = string.Join(",", ids.ToArray());
        TempData["Emails"] = cu.GetEmails(ids).Email.ToArray(); // I want these emails in my view
        return RedirectToAction("Customers");
    }

Модель:

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;
    }

1 Ответ

0 голосов
/ 03 октября 2018

Хорошо, давайте начнем с некоторых фиктивных сценариев с данными и тестовым набором

 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;
    }

и бритвой

var data = TempData["test"] as List<string>;
if (data != null)
{
    foreach (var a in data)
    {
        W‌riteLiteral(@"<li>"); /*​*/
        W‌rite(a); /*​*/
        W‌riteLiteral(@"</li>");
    }
}

Теперь, исходя из вашего сценария, я предполагаю, что ваш GetEmail вернет только наборстроки, поэтому измените ваш тип возвращаемого значения на объект Customer на list<string> как public List<string> GetEmails() и верните ee в виде списка строк.

Затем все, что вам нужно сделать в виде бритвы, как в сценарии тестирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...