【发布时间】:2021-02-21 01:20:51
【问题描述】:
我是 MVC 新手,一直坚持将模式传递给控制器。 我在 SO 中阅读了许多类似的主题,但无济于事。
在这里,我有一个用于输入订单详细信息的视图。 用户将输入订单项目详细信息(使用 ajax.BeginForm),当他点击保存时,整个订单将保存在后端(使用 Html.BeginForm)。 Ajax.BeginForm 工作正常并正确传递+显示记录。但是 Html.BeginForm 没有传递模型。 这是我的代码...
我的模型
public class OrderItemsModel
{
public string SrNo { get; set; }
public int? ItemCode { get; set; }
public string ItemName { get; set; }
public Decimal? Qty { get; set; }
public Decimal? Rate { get; set; }
public Decimal? Amount { get; set; }
}
public class OrderModel
{
public string OrderNumber { get; set; }
public string OrderDate { get; set; }
public int? CustomerCode { get; set; }
public string CustomerName { get; set; }
public string Note { get; set; }
//List of items selected in Order
public List<OrderItemsModel> ItemsSelected { get; set; }
}
从我的视图中摘录
@model OrderApplication.Models.OrderModel
@{
ViewBag.Title = "Index";
Model.ItemsSelected = ViewBag.getlist;
}
@using (Ajax.BeginForm("UpdateItemList", "Order", new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "selectedtable" }))
{
<h2 style="margin-left:5%;">Order Entry</h2>
//Order No & Date
<div class="row">
<div class="col-sm-6">
<div class="col-sm-3">
@Html.LabelFor(model => model.OrderNumber, "OrderNo"):
</div>
<div class="col-sm-3">
@Html.TextBoxFor(model => model.OrderNumber, new { @class = "form-control", @readonly = "readonly" })
</div>
</div>
<div class="col-sm-6">
<div class="col-sm-3">
@Html.LabelFor(model => model.OrderDate, "Date"):
</div>
<div class="col-sm-3">
@Html.TextBoxFor(model => model.OrderDate, new { @class = "form-control" })
</div>
</div>
</div>
<br />
//Table of entries
<div id="selectedtable">
@Html.Partial("_selectTable", Model);
</div>
<br />
}
@*Main Save*@
<div class="row">
<div class="col-sm-12">
<div class="col-sm-3">
@using (Html.BeginForm("SaveData", "Order", new { order = Model, id = "loginform", @class = "justify-content-center" }))
{
<input type="submit" value="Save Order" class="btn btn-success" />
}
</div>
<div class="col-sm-3">
<input type="button" class="btn btn-success" value="Clear Form" onclick="location.href='@Url.Action("Clear", "Order")'" />
</div>
</div>
</div>
我的控制器
public class OrderController : Controller
{
public List<OrderItemsModel> dd = new List<OrderItemsModel>() ;
[HttpPost]
public ActionResult SaveData(OrderModel order, string id)
{
if (order == null) //order is always Nothing
{
return View(order);
}
if (order.CustomerCode == 0)
{
return View(order);
}
return View(order);
}
}
}
【问题讨论】:
-
您似乎只在 HTML 表单中包含了输入按钮。请尝试在 @using Html.BeginForm 区域内包含您希望发送到控制器的所有字段/控件。看看这些示例,它们可能对您的情况有用:aspsnippets.com/Articles/… 和 c-sharpcorner.com/UploadFile/3d39b4/…
-
所有字段/控件都在 Ajax.BeginForm 内我曾尝试在 Html.BeginForm(嵌套)之后关闭 Ajax.BeginForm,但它没有帮助。我需要他们两个领域。你能推荐一个方法吗??
-
没错,嵌套 Ajax.BeginForm 和 Html.BeginForm 是行不通的。您应该选择只使用其中一个,并将其放置在您设置 Ajax.BeginForm 的位置,这样您就可以覆盖所有表单字段,如您所说。
标签: asp.net-mvc-4 model-view-controller model parameter-passing