你能给我一些关于如何调试ASP.NET MVC Binding的一般建议吗?
当一切按预期工作时,ASP.NET MVC非常棒.但是,如果某些事情没有,就像某些事情因某些未知原因而无法结合,我发现很难追查问题并发现自己花费数小时追踪一个看似简单的问题.
让我们假设您使用如下控制器方法:
[HttpPost]
public ActionResult ShipmentDetails(Order order)
{
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
让我们进一步想象Order类看起来像这样:
public class Order
{
public decimal Total {get; set;}
public Customer Customer {get; set;}
}
public class Customer
{
public string Name {get; set;}
public string Phone {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
Order在控制器方法中没有正确绑定时,有什么好的起点?只有部分Order正确绑定时,有什么好的开始?
是否可以从C#应用程序(主机)的内部(以及上下文)中运行F#脚本.
在"在上下文中"我的意思是以下应该是真的:
基本上我正在寻找类似于这个假设的API调用的API
FSharpScriptRunner.RunInContext(string script);
Run Code Online (Sandbox Code Playgroud)
请帮忙.
-Matthias
想象一下以下控制器方法:
public ActionResult ShipmentDetails(Order order)
{
return View(new OrderViewModel { Order = order });
}
Run Code Online (Sandbox Code Playgroud)
传入订单参数从自定义模型绑定器填充,该绑定器为该会话创建新订单并将其存储在会话中,或者重用当前会话中的现有订单.此订单实例现在用于填写货件详细信息表单,用户可以在其中输入其地址等.
@using(Html.BeginForm())在视图中使用时.我不能再对post方法使用相同的签名(因为这会导致模板的方法名称),我发现我添加了一个伪参数,只是为了使这个工作.
[HttpPost]
public ActionResult ShipmentDetails(Order order, object dummy)
{
if (!ModelState.IsValid)
return RedirectToAction("ShipmentDetails");
return RedirectToAction("Initialize", order.PaymentProcessorTyped + "Checkout");
}
Run Code Online (Sandbox Code Playgroud)
这方面的最佳做法是什么?您是否只需将方法重命名为类似的PostShipmentDetails()并使用其中一个重载BeginForm?或者问题源自于第一种方法是否具有订单参数?