webForumDet fria alternativet

MVC3 fråga, MultiSelectList och MVCmailer

.NET

2 svar · 567 visningar · startad av RolandT

Medlem sedan okt. 201124 inlägg
Frågan#1

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:

[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?

Medlem sedan okt. 201124 inlägg
#2

Fortsätter lite på detta, gjorde en ny controller (UserCheckBoxes) och en tom view som listar alla användare som kryssrutor:

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

@{Html.RenderAction("UserCheckBoxes");}

Så nu har jag iaf. fått in en lista med kryssrutor, varje kryssruta blir såhär i view'n:

<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?

Medlem sedan okt. 201124 inlägg
#3

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

[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);
        }
253 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)