C# Asp.net MVC下拉列表中的多个字段无法回发到数据库

C# Asp.net MVC下拉列表中的多个字段无法回发到数据库,c#,asp.net,asp.net-mvc,drop-down-menu,C#,Asp.net,Asp.net Mvc,Drop Down Menu,我有一个下拉列表,显示数据库中db.Budgets的代码和BudgetDeName 视图片段如下所示: @using (Html.BeginForm()) { @Html.AntiForgeryToken() <div class="col-md-6"> <div class="panel panel-default"> <div class="panel-head

我有一个下拉列表,显示数据库中db.Budgets的代码和BudgetDeName

视图片段如下所示:

 @using (Html.BeginForm())
    {
        @Html.AntiForgeryToken()


        <div class="col-md-6">
            <div class="panel panel-default">
                <div class="panel-heading">
                    <div class="panel-btns">
                        <a href="" class="minimize">&minus;</a>
                    </div>
                    <h4 class="panel-title">Block Styled Form</h4>
                    <p>This is an example of form with block styled label.</p>
                </div>
                @Html.ValidationSummary(true, "", new { @class = "text-danger" })
                <div class="panel-body">
                    <div class="row">
                        <div class="col-sm-6">
                            <div class="form-group">
                               @Html.LabelFor(model => model.BudgetCodeID, "BudgetCode:", new { @class = "control-label" })
                               @Html.DropDownListFor(m => m.BudgetCodeID, (SelectList)ViewBag.BudgetsList, new { @class = "form-control" })
                                @Html.ValidationMessageFor(model => model.BudgetCodeID, "", new { @class = "text-danger" })
                                   </div>

}
 public ActionResult Create()
        {


            var Budgets = (from m in db.BudgetCodes
             select new SelectListItem {
              Text = m.Code + "| " + m.BudgetCodeName,
              Value = m.BudgetCodeID.ToString()
          });

        ViewBag.BudgetsList = new SelectList(Budgets, "Value", "Text");

}

下拉菜单看起来很好,同时显示代码和BudgetCodeName

但该框不会将数据回发到sql数据库。不会创建任何错误

我会做错什么

****编辑****

我已尝试将控制器文本作为这样放置,但不起作用:

 [HttpPost]
 [ValidateAntiForgeryToken]
   public async Task<ActionResult> Create([Bind(Include = "ClinicalAssetID,AssetTypeID,ProductID,ManufacturerID,ModelID,SupplierID,SerialNo,PurchaseDate,PoNo,Costing,TeamID,StaffID,WarrantyEndDate,InspectionDate,InspectionOutcome,InspectionDocumnets,InspectionDueDate,BudgetCodeID")] ClinicalAsset clinicalAsset)
        {
            if (ModelState.IsValid)
            {
                db.ClinicalAssets.Add(clinicalAsset);
                await db.SaveChangesAsync();
                return RedirectToAction("Index");
            }
            ViewBag.AssetTypeID = new SelectList(db.AssetTypes, "AssetTypeID", "AssetTypeName", clinicalAsset.AssetTypeID);
            ViewBag.ProductID = new SelectList(db.Products, "ProductID", "ProductName", clinicalAsset.ProductID);
            ViewBag.ModelID = new SelectList(db.Models, "ModelID", "ModelName", clinicalAsset.ModelID);
            ViewBag.ManufacturerID = new SelectList(db.Manufacturers, "ManufacturerID", "ManufacturerName", clinicalAsset.ManufacturerID);
            ViewBag.SupplierID = new SelectList(db.Suppliers, "SupplierID", "SupplierName", clinicalAsset.SupplierID);
            ViewBag.TeamID = new SelectList(db.Teams, "TeamID", "TeamName", clinicalAsset.TeamID);
            ViewBag.StaffID = new SelectList(db.Staffs, "StaffID", "StaffName", clinicalAsset.StaffID);
            ViewBag.InspectionOutcomeID = new SelectList(db.InspectionOutcomes, "InspectionOutcomeID", "InspectionOutcomeResult", clinicalAsset.InspectionOutcomeID);
            var Budgets = (from m in db.BudgetCodes
                           select new SelectListItem
                           {
                               Text = m.Code + " | " + m.BudgetCodeName,
                               Value = m.BudgetCodeID.ToString()
                           });
            ViewBag.BudgetsList = new SelectList(Budgets, "Value", "Text");
            return View(clinicalAsset);
        }

您需要将要发布的数据包装到表单中:

@using (Html.BeginForm("Search", "YOUR CONTROLLER", FormMethod.Post)) {    
    <div class="form-group">
        @Html.LabelFor(model => model.BudgetCodeID, "BudgetCode:", new { @class = "control-label" })
        @Html.DropDownListFor(m => m.BudgetCodeID, (SelectList)ViewBag.BudgetsList, new { @class = "form-control" })
        @Html.ValidationMessageFor(model => model.BudgetCodeID, "", new { @class = "text-danger" })
    </div>
} 

在你的代码中。在操作方法中发送的数据类型为POST

   [HttpPost]
[ValidateAntiForgeryToken] 公共异步任务创建()

您必须在视图页面中定义“FormMethod”。例如:

@使用(Html.BeginForm(“ActionMethod名称”、“控制器名称”、FormMethod.Post)) {

} `
我希望这是我的帮助。

我发现从控制器中删除异步会将整数发回表中

[HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create([Bind(Include = "ClinicalAssetID,AssetTypeID,ProductID,ManufacturerID,ModelID,SupplierID,SerialNo,PurchaseDate,PoNo,Costing,TeamID,StaffID,WarrantyEndDate,InspectionDate,InspectionOutcome,InspectionDocumnets,InspectionDueDate, BudgetCodeID")] ClinicalAsset clinicalAsset)
        {
            if (ModelState.IsValid)
            {
                db.ClinicalAssets.Add(clinicalAsset);
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            ViewBag.AssetTypeID = new SelectList(db.AssetTypes, "AssetTypeID", "AssetTypeName", clinicalAsset.AssetTypeID);
            ViewBag.ProductID = new SelectList(db.Products, "ProductID", "ProductName", clinicalAsset.ProductID);
            ViewBag.ModelID = new SelectList(db.Models, "ModelID", "ModelName", clinicalAsset.ModelID);
            ViewBag.ManufacturerID = new SelectList(db.Manufacturers, "ManufacturerID", "ManufacturerName", clinicalAsset.ManufacturerID);
            ViewBag.SupplierID = new SelectList(db.Suppliers, "SupplierID", "SupplierName", clinicalAsset.SupplierID);
            ViewBag.TeamID = new SelectList(db.Teams, "TeamID", "TeamName", clinicalAsset.TeamID);
            ViewBag.StaffID = new SelectList(db.Staffs, "StaffID", "StaffName", clinicalAsset.StaffID);
            ViewBag.InspectionOutcomeID = new SelectList(db.InspectionOutcomes, "InspectionOutcomeID", "InspectionOutcomeResult", clinicalAsset.InspectionOutcomeID);
            var Budgets = (from m in db.BudgetCodes
                           select new SelectListItem
                           {
                               Text = m.Code + " | " + m.BudgetCodeName,
                               Value = m.BudgetCodeID.ToString()
                           });
            ViewBag.BudgetsList = new SelectList(Budgets, "Value", "Text");
            return View(clinicalAsset);
        }


请看我更新的帖子当你提交表格时,行动成功了吗?能否在POST Create操作中设置调试断点以进行验证?@johnluke.laue我发现从控制器中删除异步会将整数发回表中。那么,如何使它与async一起工作?或者,如果我不希望因为用户基数小而出现重负载或带宽问题,那么完全放弃异步是否值得呢?不,因为我使用@model Assets.Areas.Clinical.Models.ClinicalAsset。所有其他字段都可以返回
   [HttpPost]
[HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create([Bind(Include = "ClinicalAssetID,AssetTypeID,ProductID,ManufacturerID,ModelID,SupplierID,SerialNo,PurchaseDate,PoNo,Costing,TeamID,StaffID,WarrantyEndDate,InspectionDate,InspectionOutcome,InspectionDocumnets,InspectionDueDate, BudgetCodeID")] ClinicalAsset clinicalAsset)
        {
            if (ModelState.IsValid)
            {
                db.ClinicalAssets.Add(clinicalAsset);
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            ViewBag.AssetTypeID = new SelectList(db.AssetTypes, "AssetTypeID", "AssetTypeName", clinicalAsset.AssetTypeID);
            ViewBag.ProductID = new SelectList(db.Products, "ProductID", "ProductName", clinicalAsset.ProductID);
            ViewBag.ModelID = new SelectList(db.Models, "ModelID", "ModelName", clinicalAsset.ModelID);
            ViewBag.ManufacturerID = new SelectList(db.Manufacturers, "ManufacturerID", "ManufacturerName", clinicalAsset.ManufacturerID);
            ViewBag.SupplierID = new SelectList(db.Suppliers, "SupplierID", "SupplierName", clinicalAsset.SupplierID);
            ViewBag.TeamID = new SelectList(db.Teams, "TeamID", "TeamName", clinicalAsset.TeamID);
            ViewBag.StaffID = new SelectList(db.Staffs, "StaffID", "StaffName", clinicalAsset.StaffID);
            ViewBag.InspectionOutcomeID = new SelectList(db.InspectionOutcomes, "InspectionOutcomeID", "InspectionOutcomeResult", clinicalAsset.InspectionOutcomeID);
            var Budgets = (from m in db.BudgetCodes
                           select new SelectListItem
                           {
                               Text = m.Code + " | " + m.BudgetCodeName,
                               Value = m.BudgetCodeID.ToString()
                           });
            ViewBag.BudgetsList = new SelectList(Budgets, "Value", "Text");
            return View(clinicalAsset);
        }