Post 向MVC控制器发布DropDownList值

Post 向MVC控制器发布DropDownList值,post,asp.net-mvc-4,viewmodel,html-select,selectlistitem,Post,Asp.net Mvc 4,Viewmodel,Html Select,Selectlistitem,我试图从DropDownList中获取信息,并将SelectListItem“值”发布到控制器中的另一个ActionResult方法。它将被传递到的控制器将接受一个整数值,并在另一个查询中使用它 我的控制器填充DropDownList的方法如下: public ActionResult SelectCategory() { var model = new TestTypesViewModel(); var query = (from ab in db.Tbl_Admin_Bat

我试图从DropDownList中获取信息,并将SelectListItem“值”发布到控制器中的另一个ActionResult方法。它将被传递到的控制器将接受一个整数值,并在另一个查询中使用它

我的控制器填充DropDownList的方法如下:

public ActionResult SelectCategory()
{
    var model = new TestTypesViewModel();

    var query = (from ab in db.Tbl_Admin_Batch
                 from ub in db.Tbl_Admin_User_Batch
                 where ub.User_Id == 45875 && ab.Batch_Id == ub.Batch_Id
                select ab).ToList();

    model.Test_Types = query.Select(c => new SelectListItem
        {
            Text = c.Batch_Name,
            Value = c.Batch_Id.ToString()
        }).ToList();

   return View(model);
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace HFI_Assessment_Administration.ViewModels
{
    public class TestTypesViewModel
    {
        public int Batch_ID { get; set; }
        public string Test_Type { get; set; }

        public IEnumerable<SelectListItem> Test_Types { get; set; }
    }
}
@model HFI_Assessment_Administration.ViewModels.TestTypesViewModel

@{
    ViewBag.Title = "SelectCategory";
}

@using (Html.BeginForm("Practice", "WebFormUserList"))
{
    @Html.DropDownListFor(x => x.Batch_ID, Model.Test_Types)
    <input type="submit" />
} 
[HttpPost]
public ActionResult Practice(TestTypesViewModel model, int Parent_ID = 45875)
{
    var query = (from u in db.Users
                 join ur in db.User_Relationship on u.User_ID equals ur.Child_ID
                 join ub in db.Tbl_Admin_User_Batch on u.User_ID equals ub.User_Id

                 join ut in db.User_Tests on u.User_ID equals ut.User_ID into ps
                 from ut in ps.DefaultIfEmpty()

                 join lu in db.Lookups on u.First_LanguageID equals lu.LookupID

                 where ur.Parent_ID == Parent_ID && ub.Batch_Id == model.Batch_ID

                 group new { u, lu, ut } by new
                 {
                     u.User_ID,
                     u.Forename,
                     u.Surname,
                     u.Client_Code,
                     u.User_Name,
                     u.Password,
                     u.Email,
                     u.Gender,
                     u.Report_date,
                     u.EmailDate,
                     u.Job_Function,
                     lu.LookupValue
                 } into g

                 select new UserViewModel
                    {
                         User_ID = g.Key.User_ID,
                         Forename = g.Key.Forename,
                         Surname = g.Key.Surname,
                         Client_Code = g.Key.Client_Code,
                         User_Name = g.Key.User_Name,
                         Password = g.Key.Password,
                         Email = g.Key.Email,
                         Gender = g.Key.Gender,
                         Report_Date = g.Key.Report_date,
                         Email_Date = g.Key.EmailDate,
                         Test_Count = g.Count(p => p.ut.Test_ID != null),
                         Test_Completed = g.Count(p => p.ut.Completed != null),
                         Job_Function = g.Key.Job_Function,
                         Lookup_Value = g.Key.LookupValue
                     }).ToList();

        return View(query);
    }
@model IEnumerable<HFI_Assessment_Administration.ViewModels.UserViewModel>

@{
    ViewBag.Title = "ChildUsers";
}

<h2>Practice</h2>

<div>
    @{
        var grid = new WebGrid(Model);
    }

    @grid.GetHtml(

    tableStyle: "webgrid",
    headerStyle: "webgrid-header",
    footerStyle: "webgrid-footer",
    alternatingRowStyle: "webgrid-alternating-row",  
    selectedRowStyle: "webgrid-selected-row",
    rowStyle: "webgrid-row-style",

    columns: grid.Columns
    (
        grid.Column(columnName:"User_ID", header: "User ID", style: "text-align-center"),
        grid.Column(columnName:"Forename", header: "Forename", style: "text-align-center"),
        grid.Column(columnName:"Surname", header: "Surname", style: "text-align-center"),
        grid.Column(columnName:"Client_Code", header: "Client Code", style: "text-align-center"),
        grid.Column(columnName:"User_Name", header: "User Name", style: "text-align-center"),
        grid.Column(columnName:"Password", header: "Password", style: "text-align-center"),
        grid.Column(columnName:"Email", header: "Email", style: "text-align-center"),
        grid.Column(columnName:"Gender", header: "Gender", style: "text-align-center"),
        grid.Column(columnName:"Report_Date", header: "Report Date", style: "text-align-center"),
        grid.Column(columnName:"Email_Date", header: "Email Date", style: "text-align-center"),
        grid.Column(columnName:"Test_Count", header: "Count", style: "text-align-center"),
        grid.Column(columnName:"Test_Completed", header: "Completed", style: "text-align-center"),
        grid.Column(columnName:"Job_Function", header: "Job Function", style: "text-align-center"),
        grid.Column(columnName:"Lookup_Value", header: "Language", style: "text-align-center")
        )          
    )
</div>
我的TestTypesViewModel视图模型如下所示:

public ActionResult SelectCategory()
{
    var model = new TestTypesViewModel();

    var query = (from ab in db.Tbl_Admin_Batch
                 from ub in db.Tbl_Admin_User_Batch
                 where ub.User_Id == 45875 && ab.Batch_Id == ub.Batch_Id
                select ab).ToList();

    model.Test_Types = query.Select(c => new SelectListItem
        {
            Text = c.Batch_Name,
            Value = c.Batch_Id.ToString()
        }).ToList();

   return View(model);
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace HFI_Assessment_Administration.ViewModels
{
    public class TestTypesViewModel
    {
        public int Batch_ID { get; set; }
        public string Test_Type { get; set; }

        public IEnumerable<SelectListItem> Test_Types { get; set; }
    }
}
@model HFI_Assessment_Administration.ViewModels.TestTypesViewModel

@{
    ViewBag.Title = "SelectCategory";
}

@using (Html.BeginForm("Practice", "WebFormUserList"))
{
    @Html.DropDownListFor(x => x.Batch_ID, Model.Test_Types)
    <input type="submit" />
} 
[HttpPost]
public ActionResult Practice(TestTypesViewModel model, int Parent_ID = 45875)
{
    var query = (from u in db.Users
                 join ur in db.User_Relationship on u.User_ID equals ur.Child_ID
                 join ub in db.Tbl_Admin_User_Batch on u.User_ID equals ub.User_Id

                 join ut in db.User_Tests on u.User_ID equals ut.User_ID into ps
                 from ut in ps.DefaultIfEmpty()

                 join lu in db.Lookups on u.First_LanguageID equals lu.LookupID

                 where ur.Parent_ID == Parent_ID && ub.Batch_Id == model.Batch_ID

                 group new { u, lu, ut } by new
                 {
                     u.User_ID,
                     u.Forename,
                     u.Surname,
                     u.Client_Code,
                     u.User_Name,
                     u.Password,
                     u.Email,
                     u.Gender,
                     u.Report_date,
                     u.EmailDate,
                     u.Job_Function,
                     lu.LookupValue
                 } into g

                 select new UserViewModel
                    {
                         User_ID = g.Key.User_ID,
                         Forename = g.Key.Forename,
                         Surname = g.Key.Surname,
                         Client_Code = g.Key.Client_Code,
                         User_Name = g.Key.User_Name,
                         Password = g.Key.Password,
                         Email = g.Key.Email,
                         Gender = g.Key.Gender,
                         Report_Date = g.Key.Report_date,
                         Email_Date = g.Key.EmailDate,
                         Test_Count = g.Count(p => p.ut.Test_ID != null),
                         Test_Completed = g.Count(p => p.ut.Completed != null),
                         Job_Function = g.Key.Job_Function,
                         Lookup_Value = g.Key.LookupValue
                     }).ToList();

        return View(query);
    }
@model IEnumerable<HFI_Assessment_Administration.ViewModels.UserViewModel>

@{
    ViewBag.Title = "ChildUsers";
}

<h2>Practice</h2>

<div>
    @{
        var grid = new WebGrid(Model);
    }

    @grid.GetHtml(

    tableStyle: "webgrid",
    headerStyle: "webgrid-header",
    footerStyle: "webgrid-footer",
    alternatingRowStyle: "webgrid-alternating-row",  
    selectedRowStyle: "webgrid-selected-row",
    rowStyle: "webgrid-row-style",

    columns: grid.Columns
    (
        grid.Column(columnName:"User_ID", header: "User ID", style: "text-align-center"),
        grid.Column(columnName:"Forename", header: "Forename", style: "text-align-center"),
        grid.Column(columnName:"Surname", header: "Surname", style: "text-align-center"),
        grid.Column(columnName:"Client_Code", header: "Client Code", style: "text-align-center"),
        grid.Column(columnName:"User_Name", header: "User Name", style: "text-align-center"),
        grid.Column(columnName:"Password", header: "Password", style: "text-align-center"),
        grid.Column(columnName:"Email", header: "Email", style: "text-align-center"),
        grid.Column(columnName:"Gender", header: "Gender", style: "text-align-center"),
        grid.Column(columnName:"Report_Date", header: "Report Date", style: "text-align-center"),
        grid.Column(columnName:"Email_Date", header: "Email Date", style: "text-align-center"),
        grid.Column(columnName:"Test_Count", header: "Count", style: "text-align-center"),
        grid.Column(columnName:"Test_Completed", header: "Completed", style: "text-align-center"),
        grid.Column(columnName:"Job_Function", header: "Job Function", style: "text-align-center"),
        grid.Column(columnName:"Lookup_Value", header: "Language", style: "text-align-center")
        )          
    )
</div>
实践的观点如下:

public ActionResult SelectCategory()
{
    var model = new TestTypesViewModel();

    var query = (from ab in db.Tbl_Admin_Batch
                 from ub in db.Tbl_Admin_User_Batch
                 where ub.User_Id == 45875 && ab.Batch_Id == ub.Batch_Id
                select ab).ToList();

    model.Test_Types = query.Select(c => new SelectListItem
        {
            Text = c.Batch_Name,
            Value = c.Batch_Id.ToString()
        }).ToList();

   return View(model);
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace HFI_Assessment_Administration.ViewModels
{
    public class TestTypesViewModel
    {
        public int Batch_ID { get; set; }
        public string Test_Type { get; set; }

        public IEnumerable<SelectListItem> Test_Types { get; set; }
    }
}
@model HFI_Assessment_Administration.ViewModels.TestTypesViewModel

@{
    ViewBag.Title = "SelectCategory";
}

@using (Html.BeginForm("Practice", "WebFormUserList"))
{
    @Html.DropDownListFor(x => x.Batch_ID, Model.Test_Types)
    <input type="submit" />
} 
[HttpPost]
public ActionResult Practice(TestTypesViewModel model, int Parent_ID = 45875)
{
    var query = (from u in db.Users
                 join ur in db.User_Relationship on u.User_ID equals ur.Child_ID
                 join ub in db.Tbl_Admin_User_Batch on u.User_ID equals ub.User_Id

                 join ut in db.User_Tests on u.User_ID equals ut.User_ID into ps
                 from ut in ps.DefaultIfEmpty()

                 join lu in db.Lookups on u.First_LanguageID equals lu.LookupID

                 where ur.Parent_ID == Parent_ID && ub.Batch_Id == model.Batch_ID

                 group new { u, lu, ut } by new
                 {
                     u.User_ID,
                     u.Forename,
                     u.Surname,
                     u.Client_Code,
                     u.User_Name,
                     u.Password,
                     u.Email,
                     u.Gender,
                     u.Report_date,
                     u.EmailDate,
                     u.Job_Function,
                     lu.LookupValue
                 } into g

                 select new UserViewModel
                    {
                         User_ID = g.Key.User_ID,
                         Forename = g.Key.Forename,
                         Surname = g.Key.Surname,
                         Client_Code = g.Key.Client_Code,
                         User_Name = g.Key.User_Name,
                         Password = g.Key.Password,
                         Email = g.Key.Email,
                         Gender = g.Key.Gender,
                         Report_Date = g.Key.Report_date,
                         Email_Date = g.Key.EmailDate,
                         Test_Count = g.Count(p => p.ut.Test_ID != null),
                         Test_Completed = g.Count(p => p.ut.Completed != null),
                         Job_Function = g.Key.Job_Function,
                         Lookup_Value = g.Key.LookupValue
                     }).ToList();

        return View(query);
    }
@model IEnumerable<HFI_Assessment_Administration.ViewModels.UserViewModel>

@{
    ViewBag.Title = "ChildUsers";
}

<h2>Practice</h2>

<div>
    @{
        var grid = new WebGrid(Model);
    }

    @grid.GetHtml(

    tableStyle: "webgrid",
    headerStyle: "webgrid-header",
    footerStyle: "webgrid-footer",
    alternatingRowStyle: "webgrid-alternating-row",  
    selectedRowStyle: "webgrid-selected-row",
    rowStyle: "webgrid-row-style",

    columns: grid.Columns
    (
        grid.Column(columnName:"User_ID", header: "User ID", style: "text-align-center"),
        grid.Column(columnName:"Forename", header: "Forename", style: "text-align-center"),
        grid.Column(columnName:"Surname", header: "Surname", style: "text-align-center"),
        grid.Column(columnName:"Client_Code", header: "Client Code", style: "text-align-center"),
        grid.Column(columnName:"User_Name", header: "User Name", style: "text-align-center"),
        grid.Column(columnName:"Password", header: "Password", style: "text-align-center"),
        grid.Column(columnName:"Email", header: "Email", style: "text-align-center"),
        grid.Column(columnName:"Gender", header: "Gender", style: "text-align-center"),
        grid.Column(columnName:"Report_Date", header: "Report Date", style: "text-align-center"),
        grid.Column(columnName:"Email_Date", header: "Email Date", style: "text-align-center"),
        grid.Column(columnName:"Test_Count", header: "Count", style: "text-align-center"),
        grid.Column(columnName:"Test_Completed", header: "Completed", style: "text-align-center"),
        grid.Column(columnName:"Job_Function", header: "Job Function", style: "text-align-center"),
        grid.Column(columnName:"Lookup_Value", header: "Language", style: "text-align-center")
        )          
    )
</div>
@model IEnumerable
@{
ViewBag.Title=“儿童用户”;
}
实践
@{
var grid=新的WebGrid(模型);
}
@grid.GetHtml(
表样式:“webgrid”,
标题样式:“webgrid标题”,
页脚样式:“webgrid页脚”,
交替行样式:“webgrid交替行”,
selectedRowStyle:“webgrid选定行”,
行样式:“webgrid行样式”,
列:grid.columns
(
grid.Column(columnName:“用户ID”,标题:“用户ID”,样式:“文本居中对齐”),
grid.Column(columnName:“Forename”,header:“Forename”,style:“text align center”),
grid.Column(columnName:“姓氏”,header:“姓氏”,style:“文本居中对齐”),
grid.Column(columnName:“客户端代码”,标题:“客户端代码”,样式:“文本居中对齐”),
grid.Column(columnName:“用户名”,标题:“用户名”,样式:“文本居中对齐”),
grid.Column(columnName:“Password”,header:“Password”,style:“text align center”),
grid.Column(columnName:“Email”,header:“Email”,style:“text align center”),
grid.Column(columnName:“性别”,标题:“性别”,样式:“文本居中对齐”),
grid.Column(columnName:“报告日期”,标题:“报告日期”,样式:“文本居中对齐”),
grid.Column(columnName:“Email_Date”,header:“Email Date”,style:“text align center”),
grid.Column(columnName:“Test_Count”,header:“Count”,style:“text align center”),
grid.Column(columnName:“Test_Completed”,标题:“Completed”,样式:“text align center”),
grid.Column(columnName:“作业函数”,标题:“作业函数”,样式:“文本居中对齐”),
grid.Column(columnName:“Lookup_Value”,header:“Language”,style:“text align center”)
)          
)

在我尝试进入网格的下一页或尝试对网格进行排序之前,一切都很好。在我得到错误的地方,“/”应用程序中的服务器错误。找不到资源。

有很多方法可以实现这一点。您可以使用标准的
标记或使用AJAX发送值

让我们看看第一个案例:

@model TestTypesViewModel
@using (Html.BeginForm("SomeAction", "SomeController"))
{
    @Html.DropDownListFor(x => x.Test_Type, Model.Test_Types)
    <button type="submit">OK</button>
}
第二种可能性是使用AJAX。例如,您可以为dropdownlist提供一个id,并创建一些链接,单击该链接时将调用目标控制器操作,并使用AJAX向其发送所选值:

@Html.DropDownListFor(x => x.Test_Type, Model.Test_Types, new { id = "testTypeDdl" })
@Html.ActionLink("click me", "SomeAction", null, new { id = "myLink" })
然后,当单击某个按钮或链接时,使用
$.ajax
请求:

$(function() {
    $('#myLink').click(function() {
        $.ajax({
            url: this.href,
            type: 'GET',
            cache: false,
            data: { selectedValue: $('#testTypeDdl').val() },
            success: function(result) {
                alert('The value was submitted to the server');
            }
        });
        return false;
    });
});
现在,您的控制器操作可能具有以下签名:

public ActionResult SomeAction(string selectedValue)
{
    // Process the selected value here and return some result.
    // This result could either be a PartialView or a JsonResult
    // depending on your requirements.
}

哇,谢谢你的快速回复,我现在就去试试,看看我的反应如何!一个简单的问题,您的注释是什么意思://请注意,如果您打算返回与GET action//(SelectCategory.cshtml)相同的视图,则应在将此模型传递给视图之前,通过与在GET action//中相同的方式查询数据库,在//您的模型上分配Test_Types属性。另一方面,如果你想//重定向到这里,你不需要分配它。我的意思是如果你
返回视图(模型)
在POST操作中,您需要向
model.Test\u Types=…
分配一个值,与GET操作中相同。