下拉列表中的 post 操作在控制器中可用的内容

What is available in the controller from a post action in a dropdownlist

正在尝试解压缩一些继承的代码,我是 ASP.NET 的新手。我的问题:

C# (ASP.NET MVC5) 中的下拉列表中的 post 操作在控制器中可用什么?

这是我在视图中看到的内容:

 @using (Html.BeginForm("SignUp", "Location", FormMethod.Post))
 ....
 @Html.DropDownListFor(
 model => model.Member.PillarId, new SelectList (Model.Pillars, "Id", "Title"))

这里是MemberViewModel

 public class MemberViewModel : IValidatableObject{
    public int? LocationId { get; set; }
    public int? PillarId { get; set; }  
     }

这里是 Member 模型:

public class Member
{
    public int Id { get; set; }        
    public string Name { get; set; }   

    public int? LocationId { get; set; }
    public int? PillarId { get; set; }
    public String PillarTitle { get; set; }

这是 Member 模型构造函数:

    public Member() { }
    public Member(MemberViewModel member)
    { 
        PillarId = member.PillarId;
        ///
    }

这是控制器

 public ActionResult SignUp(MemberViewModel member){///}

我的表单正确地从数据库中提取信息以显示,并且 post 通过控制器正确地发送到数据库。我不想更改供用户选择的视觉选项(即我认为 ListBox 已经过时了?)。

相反,我想根据他们的选择同时分配 Member.PillarIdMember.Title,并在 Controller 中用于非数据库操作。

Controller 中的 SignUp 方法当前可用的是什么?我可以打电话给 Model.Pillars.Title 吗?是member.PillarId.Pillars.Id吗?如果没有,我如何根据用户选择动态分配它?

这段代码中有很多视图和模型视图,我不确定有什么可用...

SO 在 DropDownList 上有很多答案,所以这里有一些文章样本与我所获得的内容有些相关...
* This answer
* ListBox
* ListBoxFor: not MVC dynamic
* SelectList Constructor: Not MVC

对于下拉列表,返回的唯一值是回发时所选项目的值。

如果您想要返回其他内容,您需要在页面上设置一个隐藏字段并将更改事件侦听器绑定到下拉列表以在隐藏字段中设置标题

public class MemberViewModel : IValidatableObject{
    public int? LocationId { get; set; }
    public int? PillarId { get; set; }  
    public string Title { get; set;}
}

@using (Html.BeginForm("SignUp", "Location", FormMethod.Post))
 ....
 @Html.DropDownListFor(
 model => model.Member.PillarId, new SelectList (Model.Pillars, "Id", "Title"))
 @Html.HiddenFor(model => model.Title);

javascript

 $('#idofdropdown').on('change', function()
  {
     var selectedTitle = $(this).find(":selected").text();
     $('#Title').val(selectedTitle);
  });

如何从下拉列表中获取选定的标题: Get selected text from a drop-down list (select box) using jQuery

然后在您的控制器中,您的视图模型将在标题字符串中包含标题文本:)