Javascript MVC提交部分视图(创建)时如何点击控制器方法
创建单击(第二部分视图)未命中操作控制器。我使用了两种局部视图。我尝试了以下步骤。请参阅所附的屏幕截图Javascript MVC提交部分视图(创建)时如何点击控制器方法,javascript,jquery,asp.net-mvc,asp.net-mvc-4,Javascript,Jquery,Asp.net Mvc,Asp.net Mvc 4,创建单击(第二部分视图)未命中操作控制器。我使用了两种局部视图。我尝试了以下步骤。请参阅所附的屏幕截图 单击“添加”按钮(索引)时,下拉选择的值将添加到局部视图(第一个局部视图) 单击“编辑”,将另一个局部视图(第二个)加载到div中 第二次PV(创建)点击,我计划验证模型(SubmitReview),生成xml并更新到以前的部分视图,但这并没有发生。请看下面的代码,并建议我如何实现 public ActionResult Index() { var DBQList=DBActivity.Get
public ActionResult Index()
{
var DBQList=DBActivity.Getdbqlist();
DBQModel viewmodel=新的DBQModel();
var DBQSelectList=newselectlist(DBQList,“DBQ_ID”,“DBQ_Name”,“IsSelected”);
viewmodel.selectList=DBQSelectList;
Session[“Session_DBQModel”]=viewmodel;
返回视图(viewmodel);
}
[HttpPost]
公共操作结果索引(DBQModel DBQModel)
{
if(ModelState.IsValid)
{
//
}
var mdl=(DBQModel)会话[“sessionu DBQModel”];
var selectedvalue=Convert.ToInt32(Request.Form[“SelectedId”].ToString());
var rows=DBActivity.Getdbqlist().FirstOrDefault(x=>x.DBQ_ID==selectedvalue);
如果(行!=null)
{
DBQTable tbl=新的DBQTable();
tbl.DBQ_ID=rows.DBQ_ID;
tbl.DBQ_Name=rows.DBQ_Name;
tbl.DBQ_Desc=rows.DBQ_Desc;
tbl.VAFormNo=rows.VAFormNo;
mdl.dbqTable.Add(待定);
}
Session[“Session_DBQModel”]=mdl;
返回视图(mdl);
}
公共PartialViewResult LoadDBQ(内部id)
{
如果(id==1)
{
进食障碍进食障碍=新进食障碍();
返回PartialView(“\u EatingDisorderPV”,eatingDisorder);
}
返回部分视图(“默认PV”);
}
[HttpPost]
公共行动结果提交视图(EatingDisorder\u模型)
{
尝试
{
如果(!ModelState.IsValid)
{
字符串消息=string.Join(“;”,ModelState.Values
.SelectMany(x=>x.Errors)
.选择(x=>x.ErrorMessage));
抛出新异常(“请更正以下错误:“+Environment.NewLine+messages”);
}
如果(_model.s1_Bulima)
{
如果((_model.s1_Bulima_Date!=null)和(_model.s1_Bulima_ICD))和(_model.s1_Bulima_Name))和(_model.IsNullOrEmpty)
{
//嗯
}
其他的
{
AddModelError(“s1_Bulima_日期”,“s1_Bulima_日期是必需的”);
AddModelError(“需要s1_Bulima_ICD”,“s1_Bulima_ICD”);
AddModelError(“s1_Bulima_名称”,“s1_Bulima_名称是必需的”);
}
}
//保存到数据库
//返回Json(新的{Result=“OK”});
}
捕获(例外情况除外)
{
//返回Json(新的{Result=“ERROR”,Message=ex.Message});
ModelState.addmodeleror(“,例如Message”);
}
返回PartialView(“\u EatingDisorderPV”,\u模型);
}
Iindex.cshtml
@model WebApplication1.Models.DBQModel
@使用(Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
@DropDownListFor(n=>n.SelectedId,Model.selectList,“请选择dbq”,新建{@class=“from control col-md-4”})
@Html.Partial(“_DBQGridPV”,Model.dbqTable)
}
_DBQGridPV.cshtml
@model IEnumerable
@DisplayNameFor(model=>model.DBQ_ID)
.....
@foreach(模型中的var项目)
{
@DisplayFor(modeleItem=>item.DBQ\u ID)
.....
@ActionLink(“编辑”,“LoadDBQ”,new{id=item.DBQ_id},
新的AjaxOptions{HttpMethod=“GET”,UpdateTargetId=“DBQHolder”,InsertionMode=InsertionMode.Replace})|
@ActionLink(“Delete”,“deleteddbq”,new{id=item.DBQ_id})
}
_eating.cshtml
@model WebApplication1.Models.EatingDisorder
@使用(Html.BeginForm())
{
@Html.AntiForgeryToken()
.....
}
您遇到的第一个问题是生成的嵌套表单无效且不受支持。您好,Stephen,我已从eating无序pv.cshml(部分视图)中删除了表单标记。现在,整个页面(Index.cshtml)都有一个表单标记,即使它不起作用。如果您这样做了,则所有内容都将发回
公共操作结果索引(DBQModel DBQModel)
方法。但我怀疑你想让你的部分内容发回公共JsonResult SubmitReview(EatingDisorder(U model)?如果是这种情况,则仍然需要分部中的
标记,但将分部移动到第一个
的下方(这样它们就不会嵌套)。但是这意味着你的Index()
POST方法没有真正意义,所以我不能从你的代码中确定你想做什么Hanks Stephen,你是对的,我想发回SubmitReview。因此,我将DBQHolder移到index.cshtml之外。这很好用。假设如果任何验证失败,我添加了ModelState.addmodeleror并返回模型的部分视图,但该模型消息不会显示,主索引页也消失了。为什么?请输入修改后的SubmitReview代码。如果要保持在同一页面上,则需要使用ajax提交表单,如果返回的部分存在验证错误,则用返回的部分替换现有部分。但是为什么不在属性上使用验证属性(例如[必需]
属性)并使用客户端验证?