[英]How to open a new view passing an object as parameter in javaScript - MVC
我有兩個頁面,頁面A(及其模型)和頁面B(及其模型)均由HomeController加載,如下所示。
public class ModelA
{
public string UserName { get; set; }
public int UserID { get; set; }
}
public class ModelB
{
public ModelB()
{
this.A = new ModelA();
}
public ModelA A { get; set; }
public string Local { get; set; }
public string Destination { get; set; }
}
public class HomeController : Controller
{
public ActionResult PageA()
{
return View();
}
public ActionResult PageB(ModelA a)
{
ModelB model = new ModelB();
if (a != null)
{
model.A = a;
}
return View(model);
}
}
我的主頁面是頁面A,它調用了頁面B。但是,正如您所看到的,頁面B是由填充在頁面A中的對象加載的。因此,單擊按鈕事件單擊會填充該對象(類型為ModelA),然后調用頁面B在javaScript中單擊的事件為:
var obj = '@Html.Raw(Json.Encode(Model.A))';
var url = pageA.urlForPageB + "?a=" + obj;
window.location.href = url;
此事件效果很好。 我的意思是頁面B已成功加載,但是'a'對象為null。 我也嘗試過:
var url = pageA.urlForPageB + "?a=" + $('form#frmPageA').serialize();
window.location.href = url;
它以相同的方式工作(已加載頁面B,但'a'對象為null)。
誰能幫我?
謝謝。
這條線
var obj = '@Html.Raw(Json.Encode(Model.A))';
當剃刀渲染這條線時,它會生成這樣的輸出
var obj = '{"UserName":"Shyju","UserID":2}';
因此,當我們將其添加為查詢字符串時,最終將像這樣
yourSiteName/Home/PageB?a={%22UserName%22:%22Shyju%22,%22UserID%22:2}
模型綁定程序將無法將此查詢字符串鍵和值映射到ModelA類的對象。
為了讓ModelBinder將查詢字符串映射到ModelA的有效對象,您的查詢字符串應具有與ModelA
類的屬性名稱匹配的鍵。 所以應該像
/Home/PageB?UserName=Shyju&UserID=2
為了產生這個,我們可以使用jQuery $.param
方法。 $.param
會將js對象轉換為querystring。
這應該工作。
var obj = @Html.Raw(Json.Encode(yourObjectOfModelA));
var result = $.param(obj);
var url = "@Url.Action("PageB", "Home")?" + result;
window.location.href = url;
永遠記住,查詢字符串有一個限制(基於瀏覽器)。 因此,通過querystring發送完整的對象並不總是可行的,對於較小的較小對象(如上述),它將起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.