ASP.NET MVC3:部分视图和主视图之间的交互
我有一个接触的局部视图。目前,索引视图显示了联系人详细信息的此部分视图。局部视图中有一个保存按钮,用于保存编辑的数据。保存编辑的数据时,存在年龄验证。这一切都很好 每当用户编辑年龄并保存它时,我需要在主视图上显示相应的星座预测。我们如何做到这一点ASP.NET MVC3:部分视图和主视图之间的交互,asp.net,.net,asp.net-mvc,asp.net-mvc-3,razor,Asp.net,.net,Asp.net Mvc,Asp.net Mvc 3,Razor,我有一个接触的局部视图。目前,索引视图显示了联系人详细信息的此部分视图。局部视图中有一个保存按钮,用于保存编辑的数据。保存编辑的数据时,存在年龄验证。这一切都很好 每当用户编辑年龄并保存它时,我需要在主视图上显示相应的星座预测。我们如何做到这一点 public class ContactEntity { public int ContactID { get; set; } public string ContactName { get; set; } [Range(18
public class ContactEntity
{
public int ContactID { get; set; }
public string ContactName { get; set; }
[Range(18, 50, ErrorMessage = "Must be between 18 and 50")]
public int ContactAge { get; set; }
}
public class AgeHoroscope
{
public int Age { get; set; }
public string HoroscopePrediction { get; set; }
}
//家庭控制器
namespace MYContactEditPartialViewTEST.Controllers
{
public class HomeController : Controller
{
List<AgeHoroscope> horoList = new List<AgeHoroscope>()
{
new AgeHoroscope{Age=16,HoroscopePrediction="You are confused"},
new AgeHoroscope{Age=26,HoroscopePrediction="You are very brilliant"},
new AgeHoroscope{Age=27,HoroscopePrediction="You are practical"}
};
public ActionResult Index()
{
AgeHoroscope selectedHoro = horoList[1];
return View(selectedHoro);
}
}
}
namespace MYContactEditPartialViewTEST.Controllers
{
public class ContactController : Controller
{
public PartialViewResult MyContactDetailEdit()
{
Thread.Sleep(500);
return PartialView(GetContact());
}
[HttpPost]
public PartialViewResult MyContactDetailEdit(string conatcclick)
{
//Save to database
Thread.Sleep(500);
return PartialView(GetContact());
}
private ContactEntity GetContact()
{
ContactEntity contactEntity = new ContactEntity();
contactEntity.ContactID = 1;
contactEntity.ContactName = "Lijo";
contactEntity.ContactAge = 26;
return contactEntity;
}
}
}
//Index.cshtml
@model MYContactEditPartialViewTEST.AgeHoroscope
@{
ViewBag.Title = "Index";
}
<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"> </script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
<h2>
Index</h2>
<div>
<a>Your age is <b>@Html.DisplayFor(x => x.Age) </b>and the prediction is <b>" @Html.DisplayFor(x => x.HoroscopePrediction)
" </b></a>
<br />
</div>
<div style="border: 3px solid Teal">
@Html.Action("MyContactDetailEdit", "contact")
</div>
@model MYContactEditPartialViewTEST.age星座
@{
ViewBag.Title=“Index”;
}
指数
我只想使用jQuery执行ajax post,然后直接更改父视图客户端您需要创建一个新的ViewModel来执行此操作。这个ViewModel(IndexViewModel.cs)看起来像这样(我猜是这样的):
然后在控制器索引操作(和视图)中使用它:
其想法是,您将在ContactEntity和AgeShoroscope(或通过Linq等)之间的连接中填充占星术预测,从而将索引中的每一行显示为一个完整的对象(显示contact和horoscope)。因为数据被发布到“HomeController”和“index”操作中,所以当您在视图中更改年龄时,会反映出更改
尝试按如下方式修改主控制器,然后它将按预期工作
1) 我们可以有一本关于年龄和预测的字典,而不是一份年龄占星术的清单
2) 为HttpGet和HttpPost创建两个索引操作,如下所示
public class HomeController : Controller
{
Dictionary<int, string> AgePred = new Dictionary<int, string>()
{
{16,"You are confused"},
{26,"You are very brilliant"},
{27,"You are practical"}
};
[HttpGet]
public ActionResult Index()
{
AgeHoroscope selectedHoro = new AgeHoroscope() { Age = 26 };
selectedHoro.HoroscopePrediction = AgePred[selectedHoro.Age];
return View(selectedHoro);
}
[HttpPost]
public ActionResult Index(AgeHoroscope model,ContactEntity entity)
{
model.Age = entity.ContactAge;
model.HoroscopePrediction = AgePred[entity.ContactAge];
return View(model);
}
}
公共类HomeController:控制器
{
Dictionary AgePred=新字典()
{
{16,“你很困惑”},
{26,“你很聪明”},
{27,“你很实际”}
};
[HttpGet]
公共行动结果索引()
{
年龄占星术选择Horo=新年龄占星术(){Age=26};
selectedHoro.HoroscopePrediction=AgePred[selectedHoro.Age];
返回视图(选择的方向);
}
[HttpPost]
公共行动结果索引(年龄星座模型、联系人实体)
{
model.Age=entity.ContactAge;
model.HoroscopePrediction=AgePred[entity.ContactAge];
返回视图(模型);
}
}
这是可能的;但我对这种方法不感兴趣,我给出的只是一个简单的例子。你的建议是不要偏袒他人,不是吗?这在我的真实场景中是不可能的。还有其他建议吗?我不认为,这就是我想要的。我在主视图中没有任何帖子。因此,是否要将数据发布到MyContactDetailEdit?当它返回PartialViewResult时,唯一的选项是发布javascript请求并使用结果更新视图。只有在为父操作调用的操作中,然后访问子操作以呈现部分视图,才能使用this.ControllerContext.ParentActionViewContext获取子操作中的父操作上下文
public class IndexViewModel
{
public int ContactID { get; set; }
public string ContactName { get; set; }
public int ContactAge { get; set; }
public string HoroscopePrediction { get; set; }
}
@model MYContactEditPartialViewTEST.IndexViewModel
public class HomeController : Controller
{
Dictionary<int, string> AgePred = new Dictionary<int, string>()
{
{16,"You are confused"},
{26,"You are very brilliant"},
{27,"You are practical"}
};
[HttpGet]
public ActionResult Index()
{
AgeHoroscope selectedHoro = new AgeHoroscope() { Age = 26 };
selectedHoro.HoroscopePrediction = AgePred[selectedHoro.Age];
return View(selectedHoro);
}
[HttpPost]
public ActionResult Index(AgeHoroscope model,ContactEntity entity)
{
model.Age = entity.ContactAge;
model.HoroscopePrediction = AgePred[entity.ContactAge];
return View(model);
}
}