簡體   English   中英

如何在JavaScript中打開將對象作為參數傳遞的新視圖-MVC

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM