如何解决如何在MVC中同时使用Ajax.BeginForm和Html.BeginForm解决空模型问题
我是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",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);
}
}
}
解决方法
您不应同时使用 Ajax.BeginForm 和 Html.BeginForm ,因为它们不会工作。请检查此帖子,可能会对您有所帮助,以确定您希望选择的职位: https://forums.asp.net/t/1757936.aspx?When+to+use+Html+BeginForm+vs+ajax+BeginForm
如果您仍然想使用 Html.BeginForm ,只需移动using句子来替换您的 Ajax.BeginForm 位于页面顶部,因此该表单涵盖了所有字段,并且模型不会为空。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。