将独占选择传递给ASP.NET窗体

本文关键字:ASP NET 窗体 选择 | 更新日期: 2023-09-27 17:57:46

我正在ASP中制作一个应用程序。NET MVC,它允许您发布具有两个文本字段和一个从独占选择中设置的字符串的表单。这意味着向用户显示一个字符串列表,当选择(一次只能选择一个)并提交(此字段是必需的)时,选择中的文本将传递给控制器。我尝试在引导程序中使用列表组,然后为onclick添加JQuery事件,并设置隐藏表单字段的值。单击处理程序工作正常,但值设置有问题。这是我的代码:

<div class="col-xs-3">
            <div class="list-group" style="overflow-y: auto; height: 300px; width: 100%;">
                @Html.ActionLink("Create new occupation", "createOccupation", "Occupation", null, new { @class = "list-group-item" })
                @foreach (var occ in Get.AllOccupations().ToList())
                {
                    <a href="#" class="list-group-item">@occ.Title</a>
                }
            </div>
        </div>
<script>
    $('.list-group-item').on('click', function () {
        $('.list-group a.active').removeClass('active');
        $('#OccupancySelectBox').val($(this).find("a").first().text());
        $(this).addClass('active');
    })
</script>

将独占选择传递给ASP.NET窗体

我想问的是,我如何将这些值传递给控制器没有这个JQuery垃圾?

当然。如果您喜欢的话,您可以使用没有jQuery/ajax的普通表单发布。

假设你有一个像这样的视图模型

public class JobSelectionVm
{
  public string FirstName {set;get;}
  public string LastName { set;get;}
  public int SelectedJobId {set;get;
}

现在,您的视图将被强键入此视图模型

@model JobSelectionVm
@using(Html.BeginForm())
{
   <label>First Name</label>
   @Html.TextBoxFor(s=>s.FirstName)
   <label>Last Name</label>
   @Html.TextBoxFor(s=>s.LastName)
   <label>Select an Occupation</label>
   var jobList =  Get.AllOccupations().ToList(); 
   foreach (var occ in jobList)
   {
      @Html.RadioButtonFor(f => Model.SelectedJobId, ev.JobId)
      <div>@ev.Title</div>
   }
  <input type="submit" />
}

这将为jobList集合中的项目生成单选按钮。提交表单时,所选作业的id将在SelectedJobId属性值中可用。

[HttpPost]
public ActionResult Create(JobSelectionVm model)
{
   // check model.FirstName,model.LastName, model.SelectedJobId
  // to do : return something
}

此外,您可以更新视图模型,使其具有一个携带单选按钮数据的属性(Get.AllOccuations()),这样就可以避免在剃刀视图中调用Get.AllOccupations()