gpt4 book ai didi

c# - 我怎样才能正确测试我传递给 Controller ​​的模型是否属于特定类型?

转载 作者:行者123 更新时间:2023-11-30 17:14:56 27 4
gpt4 key购买 nike

我有一个包含多个表单的 View 。这些表单具有使用 Html.RenderPartial() 添加的部分 View 。我希望能够这样区分单个 actionResult 中的模型:

    [HttpPost]
public ActionResult LogOn(dynamic Model, string returnUrl)
{
if (Model is RegisterModel)
{
Register((RegisterModel)Model, returnUrl);
}
return View();
}

为什么这不起作用?我也尝试过将 Model 作为对象而不是动态输入,但这也无济于事。 Model.GetType() 总是返回对象,而 Model is RegisterModel 总是返回 false。我在这里需要了解的 MVC3 行为中缺少什么?谢谢你的时间

最佳答案

首先,为什么不为不同的模型类型创建不同的操作方法?这将导致更好的性能和更好的“关注点分离”。但是,如果您想按照您描述的方式执行此操作,请尝试...

也许这听起来很奇怪但是

It is statically-typed as a dynamic type.

您可以创建一个自定义模型绑定(bind)器来尝试绑定(bind)您的将信息发布或获取到您想要的类型。

public class MyCustomModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
object result;
HttpRequestBase request = controllerContext.HttpContext.Request;

// custom logic sample
if (request.Params["ParamName"].ToString() == "xyz")
{
result = new RegisterModel();
result.Propertie1 = request.Params["Propertie1"];
}
else
{
// create another model
}

return result;
}
}

那么你可以这样做。

[HttpPost]
public ActionResult LogOn([ModelBinder(typeof(MyCustomModelBinder))] object Model, string returnUrl)
{
if (Model is RegisterModel)
{
Register((RegisterModel)Model, returnUrl);
}
return View();
}

Scott Hanselman 写了一篇关于动态关键字的精彩博文: C# 4 and the dynamic keyword

有关 IModelBinder 的更多信息:ASP.NET MVC Custom Model Binding

希望对您有所帮助

关于c# - 我怎样才能正确测试我传递给 Controller ​​的模型是否属于特定类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8316820/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com