为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
江户川乱折腾 2022-11-13 13:58:04
我有一个下拉列表,显示数据库中 db.Budgets 的代码和 BudgetCodename。视图片段如下所示: @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");}下拉菜单看起来不错,并显示代码和预算代码名称。但是该框不会将数据回发到 sql 数据库。不会产生任何错误。我做错了什么?
查看完整描述

3 回答

?
繁星淼淼

TA贡献1775条经验 获得超11个赞

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


@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 操作需要接受您发布的模型:


public ActionResult Post(MyModel model)

{

     //call a service to save info to database

}


查看完整回答
反对 回复 2022-11-13
?
临摹微笑

TA贡献1982条经验 获得超2个赞

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


[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);

        }


查看完整回答
反对 回复 2022-11-13
?
桃花长相依

TA贡献1860条经验 获得超8个赞

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

   [HttpPost]

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

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

@using (Html.BeginForm("ActionMethod 名称", "控制器名称", FormMethod.Post)) {

} ` 我希望这对我有帮助。



查看完整回答
反对 回复 2022-11-13
  • 3 回答
  • 0 关注
  • 88 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信