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