簡體   English   中英

在動作方法中,如何將發布數據綁定到動態對象?

[英]In an action method, how can I bind post data to a dynamic object?

我想這樣做:

public ActionResult SaveStuff(dynamic vm) {

    StoreTheValue(vm.myvalue);

    return Content("Saved :)");
}

這不起作用,MVC 似乎不想創建具有與請求的 post 數據相對應的屬性的動態對象。

現在我知道正確定義的視圖模型的重點是創建強類型數據結構並將 MVC 綁定數據到它們中,但是鑒於我使用 ajax 從 javascript 發布數據,它無論如何都不是強類型數據,所以我不t 看到我這樣做失去了任何可維護性,這將節省我創建視圖模型類的時間和精力。

任何人都可以幫助建議我如何將發布數據綁定到動態對象,可能使用自定義模型綁定器?

你用javascript做的dynamic類型和ajax請求不對應

您始終可以在 javascript 端創建強類型對象屬性。

無論如何,您可以像這樣使用FormCollection

[HttpPost]
public ActionResult yourAction(FormCollection collection)
{
    StoreTheValue(Convert.ToString(collection["myvalue"]));

    return Content("Saved :)");
}   

但我認為最好考慮一種強類型的方式。

實現此目的的一種可能方法是使用自定義模型綁定器,假設您將 Json 發布到操作

public class DynamicBinder : IModelBinder
    {
        public object BindModel( ControllerContext controllerContext, ModelBindingContext bindingContext )
        {
            using( var streamReader = new StreamReader( controllerContext.HttpContext.Request.InputStream ) )
            {
                return JsonConvert.DeserializeObject< dynamic >( streamReader.ReadToEnd() );
            }
        }
    }

然后在你的行動中你可以告訴它,使用自定義活頁夾

public ActionResult SaveStuff([ModelBinder(typeof(DynamicBinder))]dynamic vm) {

    StoreTheValue(vm.myvalue);

    return Content("Saved :)");
}

然后像這樣發布你的json:

{
   "myvalue":{...}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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