Asp.net mvc 你能不能只更新一个局部视图而不是整页文章?
是否有一种方法可以在asp.net mvc中提交部分视图表单而不重新加载父页面,但只将部分视图重新加载到其新状态?类似于knockout.js如何使用数据绑定进行更新 我的数据表以可变的列数/名称呈现,因此我不认为knockout.js是此表的一个选项,因此我尝试使用局部视图来代替。没有jQuery是不行的 您需要做的是将您的部分放入div中,类似于:Asp.net mvc 你能不能只更新一个局部视图而不是整页文章?,asp.net-mvc,jquery,knockout.js,partial-views,Asp.net Mvc,Jquery,Knockout.js,Partial Views,是否有一种方法可以在asp.net mvc中提交部分视图表单而不重新加载父页面,但只将部分视图重新加载到其新状态?类似于knockout.js如何使用数据绑定进行更新 我的数据表以可变的列数/名称呈现,因此我不认为knockout.js是此表的一个选项,因此我尝试使用局部视图来代替。没有jQuery是不行的 您需要做的是将您的部分放入div中,类似于: <div id="partial"> @Html.Partial("YourPartial") </div>
<div id="partial">
@Html.Partial("YourPartial")
</div>
public ActionResult GetData(YourModel model) //that's if you need the model
{
//do whatever
return View(model);
}
然后,您的操作将类似于:
<div id="partial">
@Html.Partial("YourPartial")
</div>
public ActionResult GetData(YourModel model) //that's if you need the model
{
//do whatever
return View(model);
}
实际上,如果您的Partial有一个子动作方法,那么您可以直接发布(甚至使用锚定链接)到子动作并获得类似Ajax的效果。我们在几个视图中执行此操作 语法是
@Html.Action("MyPartial")
儿童行动是
public ActionResult MyPartial()
{
return PartialView(Model);
}
如果您的表单发布到子操作
@using (Html.BeginForm("MyPartial"))
{
...
}
局部视图将使用从子操作返回的局部视图进行更新
Jquery仍然是更新部分内容的合法方法。但从技术上讲,您的问题的答案是肯定的。我将使用Ajax表单帮助程序,使用局部视图和@html.RenderPartial(“partialName”)来处理此类场景
通常,我在查找此类信息时发现,人们提供的信息太有限,因此我将尝试在这里提供帮助。关键是设置一个div,其中的ID可以附加返回html。此外,当点击控制器时,确保它返回部分。这种方法存在一些潜在的问题,但如果天气好的话,它应该会起作用
<div id="CategoryList" class="widget">
@{
Html.RenderPartial("WidgetCategories.cshtml");
}
</div>
function DeleteCategory(CategoryID) {
$.get('/Dashboard/DeleteWidgetCategory?CategoryID=' + CategoryID,
function (data) {
if (data == "No") {
alert('The Category has report widgets assigned to it and cannot be deleted.');
}
else {
$('#CategoryList').html(data);
}
}
);
}
[HttpGet("DeleteWidgetCategory")]
[HttpPost("DeleteWidgetCategory")]
public IActionResult DeleteWidgetCategory(string CategoryID)
{
string Deleted = CategoryModel.DeleteCategory(CategoryID);
if (Deleted == "Yes")
{
return PartialView("WidgetCategories");
}
else
{
return this.Json("No");
}
}
@{
RenderPartial(“WidgetCategories.cshtml”);
}
函数DeleteCategory(CategoryID){
$.get('/Dashboard/DeleteWidgetCategory?CategoryID='+CategoryID,
功能(数据){
如果(数据=“否”){
警报('类别已分配报告小部件,无法删除');
}
否则{
$('#CategoryList').html(数据);
}
}
);
}
[HttpGet(“DeleteWidgetCategory”)]
[HttpPost(“DeleteWidgetCategory”)]
公共IActionResult DeleteWidgetCategory(字符串类别ID)
{
删除的字符串=CategoryModel.DeleteCategory(CategoryID);
如果(已删除=“是”)
{
返回部分视图(“WidgetCategories”);
}
其他的
{
返回此.Json(“否”);
}
}
在主视图中
<div id=SearchResult>
@Html.Partial("_NameOfPartialView", Model)
</div>
<input type="button" id="btnSubmit" value="Submit">
在你的家庭控制器
public ActionResult GetEmployee(int Id)
{
var employee= context.Employee.Where(x=> x.EmployeeId == Id)
return this.PartialView("_NameOfPartialView", employee);
}
试一下这个。戴夫,你能详细介绍一下它是怎么工作的吗?我本以为这会导致从已发布表单返回的部分视图显示为新页面,而不是就地更新。@johnyhk,我也本以为如此。令人惊讶的是,这会导致局部视图返回到父视图而不是父视图。这看起来很简单,只是我不明白:)MVC5
Html.BeginForm(“string”)
中的@Html.Action(“MyPartial”)在哪里调用扩展重载BeginForm(这个HtmlHelper HtmlHelper,对象routeValues)
,并导致。我觉得这个答案“有效”是无意的行为。这是一个很好的解决方案,适合那些了解web开发但不了解c#mvc的人。@MurWade对不起,我不明白为什么这个解决方案不适用于使用mvc&c的人??你能详细说明一下吗?@JoeyBob这适用于任何使用MVC&C的人。你可以用多种方式做一件事,对于那些做过web开发者(单页应用程序、ajax等)而不是mvc的人来说,这种方式似乎是最容易理解的方法。有了mvc#您也可以使用更新面板,但这并不是这么简单。