Meddelande

Minska
No announcement yet.

MVC3 fråga, MultiSelectList och MVCmailer

Minska
X
 
  • Filter
  • Klockan
  • Show
Clear All
new posts

  • MVC3 fråga, MultiSelectList och MVCmailer

    OK, jag har ett formulär och i den har jag lagt en MultiSelectList, listan hämtar namn och epost ur en databas, meningen är att man ska kunna välja dom personer man vill notifiera om en ändring som gjorts, MVCmailer använder jag för att skicka.

    Problemet är att den kod jag har endast skickar åt en person oavsett hur många som är valda ur listan. Hade hoppats att alla valda skulle få en epost, men endast den man väljer först får en epost.

    Controllern som sköter allt ser ut såhär:
    Kod:
    [HttpPost]
            public ActionResult Edit(Deviation deviation, string ePost)
            {
                if (ModelState.IsValid)
                {
                    db.Entry(deviation).State = EntityState.Modified;
                    db.SaveChanges();
    
                    var mailer = new UserMailer();
                    var msg = mailer.WelcomeMessage(email: ePost);
                    msg.Send();
    
                    return RedirectToAction("Index");
    
                    //return RedirectToAction("Index");
                }
                return View(deviation);
            }
    Vet inte riktigt vad jag kan göra här nu, kanske jag går helt fel tillväga. I en gammal ASP program jag gjorde så hade jag en hög med kryssrutor istället med samma namn och i koden sen körde jag en SQL som såg ut såhär:
    "SELECT ePost FROM Users WHERE ID IN ("& request("epost") &") "

    Och bara loopade igenom epostkoden, lätt som en plätt... Kan något liknande göras i MVC?

  • #2
    Fortsätter lite på detta, gjorde en ny controller (UserCheckBoxes) och en tom view som listar alla användare som kryssrutor:
    Kod:
    @model IEnumerable<mvcAvvikelser.Models.User>
    @{
    	Layout = null;
    }
    @foreach (var item in Model)
    {
    <input type="checkbox" id="@Html.DisplayTextFor(ModelItem => item.UserID)" name="ePost" value="@Html.DisplayTextFor(ModelItem => item.UserID)" /> @Html.DisplayTextFor(ModelItem => item.Name) <br />
    }
    Sen länkade jag från formuläret genom att använda:
    Kod:
    @{Html.RenderAction("UserCheckBoxes");}
    Så nu har jag iaf. fått in en lista med kryssrutor, varje kryssruta blir såhär i view'n:
    Kod:
    <input type="checkbox" id="2" name="ePost" value="2" /> Användare1 <br />
    
    <input type="checkbox" id="3" name="ePost" value="3" /> Användare2 <br />
    
    <input type="checkbox" id="4" name="ePost" value="4" /> Användare3 <br />
    
    <input type="checkbox" id="5" name="ePost" value="5" /> Användare4 <br />
    Det här borde ju gå att utnyttja på något vis tycker man?

    Kommentera


    • #3
      Jahapp, löste det själv så här är hur jag gjorde det, för någon som undrar samma sak:

      Kod:
      [HttpPost]
              //int[] Epost är då vilka userId man har valt i view:n
              public ActionResult Edit(Deviation deviation, int[] Epost)
              {
                  if (ModelState.IsValid)
                  {
                      db.Entry(deviation).State = EntityState.Modified;
                      db.SaveChanges();
      
                      //Här börjar då koden som skickar posten, denna bit hämtar addresserna ur tabellen
                      int[] ePostList = Epost;
                      var myEpost = from p in db.Users
                                       where ePostList.Contains(p.UserID)
                                       select p;
                      myEpost.ToList();
      
                      //Sen loopar vi genom mvcmailer koden
                      foreach (var item in myEpost)
                      {
                          var mailer = new UserMailer();
                          var msg = mailer.WelcomeMessage(email: item.Epost);
                          msg.Send();
                      }
      
                      //tillbaka till startsidan
                      return RedirectToAction("Index");
                  }
                  return View(deviation);
              }

      Kommentera

      Working...
      X