【问题标题】:I need when choosing a name to automatically select email address of this person in DropDownListFor在选择名称时我需要在 DropDownListFor 中自动选择此人的电子邮件地址
【发布时间】:2026-02-05 20:55:02
【问题描述】:

在我的应用程序的第一页中,我输入了个人的数据(姓名、电子邮件等),在第二页中,我选择了要给他一本书的人。当我在 DropDownListFor 中选择名称时,我需要在第二页中自动选择电子邮件。型号不一样!!!!!谢谢!

这里是第一页的控制器:

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MvcLib.Models;
using MvcLibraly.Models;

namespace MvcLibraly.Controllers
{
    public class UsersController : Controller
    {
        private BookDBContext db = new BookDBContext();

        //
        // GET: /Users/

        public ActionResult Index()
        {
            return View(db.Users.ToList());
        }

        //
        // GET: /Users/Details/5


        public ActionResult SearchIndex(string searchString)
        {
            var users = from m in db.Users
                         select m;

            if (!String.IsNullOrEmpty(searchString))
            {
                users = users.Where(s => s.Name.Contains(searchString));
            }

            return View(users);
        }


        public ActionResult Details(int id = 0)
        {
            User user = db.Users.Find(id);
            if (user == null)
            {
                return HttpNotFound();
            }
            return View(user);
        }

        //
        // GET: /Users/Create

        public ActionResult Create()
        {
            return View();
        }

        //
        // POST: /Users/Create

        [HttpPost]
        public ActionResult Create(User user)
        {
            if (ModelState.IsValid)
            {
                db.Users.Add(user);
                db.SaveChanges();
                return RedirectToAction("Index");
            }

            return View(user);
        }

        //
        // GET: /Users/Edit/5

        public ActionResult Edit(int id = 0)
        {
            User user = db.Users.Find(id);
            if (user == null)
            {
                return HttpNotFound();
            }
            return View(user);
        }

        //
        // POST: /Users/Edit/5

        [HttpPost]
        public ActionResult Edit(User user)
        {
            if (ModelState.IsValid)
            {
                db.Entry(user).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            return View(user);
        }

        //
        // GET: /Users/Delete/5

        public ActionResult Delete(int id = 0)
        {
            User user = db.Users.Find(id);
            if (user == null)
            {
                return HttpNotFound();
            }
            return View(user);
        }

        //
        // POST: /Users/Delete/5

        [HttpPost, ActionName("Delete")]
        public ActionResult DeleteConfirmed(int id)
        {
            User user = db.Users.Find(id);
            db.Users.Remove(user);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        protected override void Dispose(bool disposing)
        {
            db.Dispose();
            base.Dispose(disposing);
        }
    }
}

这是第一页的视图:

@model MvcLib.Models.User

@{
    ViewBag.Title = "Добавление читателя";
}

<h2>Добавление читателя</h2>

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)

    <fieldset>
        <legend>User</legend>

       @* <div class="editor-label">
            Фамилия
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Surname)
            @Html.ValidationMessageFor(model => model.Surname)*@
        @*</div>*@

        <div class="editor-label">
            Ф.И.О.
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Name)
            @Html.ValidationMessageFor(model => model.Name, "Введены некорректные данные!")
        </div>

       @* <div class="editor-label">
            Отчество
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Lastname)
            @Html.ValidationMessageFor(model => model.Lastname)
        </div>*@

        <div class="editor-label">
            Год рождения
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.BirthDate)
            @Html.ValidationMessageFor(model => model.BirthDate, "Введены некорректные данные!")
        </div>

        <div class="editor-label">
            Телефон
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Phone)
            @Html.ValidationMessageFor(model => model.Phone, "Введены некорректные данные!")
        </div>

        <div class="editor-label">
            E-mail
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Adress)
            @Html.ValidationMessageFor(model => model.Adress, "Введены некорректные данные!")
        </div>

        <div class="editor-label">
            Группа
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Group)
            @Html.ValidationMessageFor(model => model.Group, "Введены некорректные данные!")
        </div>

        <p>
            <input type="submit" value="Добавить" />
        </p>
    </fieldset>
}

<div>
    @Html.ActionLink("Вернуться к списку читателей", "Index")
</div>

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

这里是第二页的控制器:

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MvcLibraly.Models;
using System.Web.Mvc.Html;
using System.Net.Mail;
using System.Net;
using System.Web.UI.WebControls;
using System.IO; 


namespace MvcLibraly.Controllers
{
    public class UchetController : Controller
    {
        private BookDBContext db = new BookDBContext();

        //
        // GET: /Uchet/ !!!!!!!!!!!!

        public ActionResult Index()
        {
            return View(db.Uchets.ToList());
        }


        [HttpPost]
        public ActionResult Index(Uchet uchet)
        {
            return View(uchet);
        }


        //
        // GET: /Uchet/Details/5


        //public ActionResult SearchIndex(string bookName, string searchString)
        //{


        //}







        public ActionResult Details(int id = 0)
        {



            Uchet uchet = db.Uchets.Find(id);
            if (uchet == null)
            {
                return HttpNotFound();
            }
            return View(uchet);
        }

        public ActionResult SearchIndex(string searchString)
        {
            var users = from m in db.Uchets
                        select m;

            if (!String.IsNullOrEmpty(searchString))
            {
                users = users.Where(s => s.Name.Contains(searchString));
            }

            return View(users);
        }


        //
        // GET: /Uchet/Create

        public ActionResult Create(string userName, string nameTitle, string nameAdress)
        {
            var NameLst = new List<string>();

            var NameQry = from b in db.Users
                          orderby b.Name
                          select b.Name;
            NameLst.AddRange(NameQry.Distinct());
            ViewBag.userName = new SelectList(NameLst);

            var TitleLst = new List<string>();

            var TitleQry = from r in db.Lib
                           orderby r.Title
                           select r.Title;
            TitleLst.AddRange(TitleQry.Distinct());
            ViewBag.nameTitle = new SelectList(TitleLst);


            var AdressLst = new List<string>();

            var AdressQry = from j in db.Users
                            orderby j.Name
                            select j.Adress;
            AdressLst.AddRange(AdressQry.Distinct());
            ViewBag.nameAdress = new SelectList(AdressLst);





            return View();
        }

        //
        // POST: /Uchet/Create

        [HttpPost]
        public ActionResult Create(Uchet uchet)
        {
            if (ModelState.IsValid)
            {
                db.Uchets.Add(uchet);
                db.SaveChanges();
                return RedirectToAction("Index");
            }

            return View(uchet);
        }

        //
        // GET: /Uchet/Edit/5

        public ActionResult Edit(string userName, string nameTitle, string nameAdress, int id = 0)
        {
            var NameLst = new List<string>();

            var NameQry = from b in db.Users
                          orderby b.Name
                          select b.Name;
            NameLst.AddRange(NameQry.Distinct());
            ViewBag.userName = new SelectList(NameLst);

            var TitleLst = new List<string>();

            var TitleQry = from r in db.Lib
                           orderby r.Title
                           select r.Title;
            TitleLst.AddRange(TitleQry.Distinct());
            ViewBag.nameTitle = new SelectList(TitleLst);


            var AdressLst = new List<string>();

            var AdressQry = from j in db.Users
                            orderby j.Name
                            select j.Adress;
            AdressLst.AddRange(AdressQry.Distinct());
            ViewBag.nameAdress = new SelectList(AdressLst);





            Uchet uchet = db.Uchets.Find(id);
            if (uchet == null)
            {
                return HttpNotFound();
            }
            return View(uchet);



        }

        //
        // POST: /Uchet/Edit/5

        [HttpPost]
        public ActionResult Edit(Uchet uchet)
        {
            if (ModelState.IsValid)
            {
                db.Entry(uchet).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            return View(uchet);
        }

        //
        // GET: /Uchet/Delete/5

        public ActionResult Delete(int id = 0)
        {
            Uchet uchet = db.Uchets.Find(id);
            if (uchet == null)
            {
                return HttpNotFound();
            }
            return View(uchet);
        }

        //
        // POST: /Uchet/Delete/5

        [HttpPost, ActionName("Delete")]
        public ActionResult DeleteConfirmed(int id)
        {
            Uchet uchet = db.Uchets.Find(id);
            db.Uchets.Remove(uchet);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        protected override void Dispose(bool disposing)
        {
            db.Dispose();
            base.Dispose(disposing);
        }
    }
}

这是第二页的视图:已更新!!!

@model MvcLibraly.Models.Uchet

@{
    ViewBag.Title = "Выдача книги";
}

<h2>Выдача книги</h2>

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)

    <fieldset>
        <legend>Uchet</legend>

        <div class="editor-label">
            Выберите читателя:
        </div>
        <div class="editor-field">
            @*@Html.DropDownList("userName", "Выберите читателя...", model.Name)*@
            @Html.DropDownListFor(model => model.Name, (SelectList)ViewBag.userName, new { style = "width: 310px" }) 
            @Html.ValidationMessageFor(model => model.Name, "Введены некорректные данные!")
        </div>

        <div class="editor-label">
            Выберите адрес:
        </div>
        <div class="editor-field">
            @Html.DropDownListFor(model => model.Adress, (SelectList)ViewBag.nameAdress, new { style = "width: 310px" }) 
            @Html.ValidationMessageFor(model => model.Adress, "Введены некорректные данные!")
        </div>


        <div class="editor-label">
            Выберите название книги:
        </div>
        <div class="editor-field">
            @Html.DropDownListFor(model => model.Title, (SelectList)ViewBag.nameTitle, new { style = "width: 310px" }) 
            @Html.ValidationMessageFor(model => model.Title, "Введены некорректные данные!")
        </div>

        <div class="editor-label">
            Выберите дату выдачи книги:
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.DatePol) 
            @Html.ValidationMessageFor(model => model.DatePol, "Введены некорректные данные!")
        </div>

        <div class="editor-label">
            Выберите дату возврата книги:
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.DateVoz)
            @Html.ValidationMessageFor(model => model.DateVoz, "Введены некорректные данные!")
        </div>

        <p>
            <input type="submit" value="Создать" />
        </p>
    </fieldset>
}

<div>
    @Html.ActionLink("Назад", "Index")
</div>

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

【问题讨论】:

  • 有什么尝试?你有错误吗?
  • @lnanikian 第二页中的电子邮件未选择自动...
  • 同一个型号为什么要用两个控制器?如果您希望您的第二封电子邮件是自动的,您需要传递选定的值。当您从第一页中选择时,您有一个值,然后将此值传递给创建 dropDown selectList 的操作,然后默认将其用于所选值。检查 SelectList() 的重载:
  • @lnanikian 哦,对不起,我忘了说它们是不同的模型......
  • 我只在您的第二个视图中看到编辑器。我没有看到电子邮件下拉列表。

标签: asp.net-mvc asp.net-mvc-4 html.dropdownlistfor


【解决方案1】:

我在您的第二页中没有看到下拉菜单,但这是默认值的方法。在 DropDownListFor 中,所选值由 lambda 表达式中的值设置。所以在你的模型中你需要添加一个选定的字段

public string SelectedEmail { get; set; }

在您的控制器上,您通过设置该字段来设置所选值

model.SelectedEmail = //value based on view 1 selection

那么在你看来

@Html.DropDownListFor(x => x.SelectedEmail, Model.EmailList)

这将在您的下拉列表中设置选定的值,如果他们在下拉列表中更改该值,它将返回到该 SelectedEmail 字段中的控制器。

【讨论】:

  • 妈的,我又发错图了 :D 现在又更新了!)
最近更新 更多