标签: model-binding

ASP.NET MVC模型绑定外键关系

是否可以将我的模型上的外键关系绑定到表单输入?

说我Car和之间有一对多的关系Manufacturer.我想要一个更新表单,Car其中包括用于设置的选择输入Manufacturer.我希望能够使用内置的模型绑定来做到这一点,但我开始认为我必须自己做.

我的动作方法签名如下所示:

public JsonResult Save(int id, [Bind(Include="Name, Description, Manufacturer")]Car car)
Run Code Online (Sandbox Code Playgroud)

表单发布值Name,Description和Manufacturer,其中Manufacturer是类型的主键int.名称和描述设置正确,但不是制造商,这是有道理的,因为模型绑定器不知道PK字段是什么.这是否意味着我必须写一个IModelBinder它知道这个的自定义?我不确定这是如何工作的,因为我的数据访问存储库是通过每个Controller构造函数上的IoC容器加载的.

asp.net-mvc model-binding

7
推荐指数
1
解决办法
9564
查看次数

如何将句点和逗号作为浮点数的有效小数点分隔符?

我想允许"123.45"和"123,45"作为有效的十进制输入,但目前"123.45"结果"The value '123.45' is not valid for Foo".

decimal model-binding asp.net-mvc-2

7
推荐指数
1
解决办法
3887
查看次数

如何在模型创建期间覆盖ASP.NET MVC 3默认模型绑定器以解析依赖关系(使用ninject)?

我有一个ASP.NET MVC 3应用程序,它使用Ninject来解决依赖关系.到目前为止,我必须做的就是使Global文件继承NinjectHttpApplication,然后重写CreateKernel方法以映射我的依赖项绑定.之后,我能够在我的MVC控制器构造函数中包含接口依赖项,并且ninject能够解析它们.一切都很棒.现在我想在模型绑定器中解决依赖关系,当它创建我的模型的实例时,但我不知道如何做到这一点.

我有一个视图模型:

public class CustomViewModel
{
    public CustomViewModel(IMyRepository myRepository)
    {
        this.MyRepository = myRepository;
    }

    public IMyRepository MyRepository { get; set; }

    public string SomeOtherProperty { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后我有一个接受视图模型对象的action方法:

[HttpPost]
public ActionResult MyAction(CustomViewModel customViewModel)
{
    // Would like to have dependency resolved view model object here.
}
Run Code Online (Sandbox Code Playgroud)

如何覆盖默认模型绑定器以包含ninject并解决依赖关系?

c# asp.net-mvc dependency-injection model-binding asp.net-mvc-3

7
推荐指数
1
解决办法
5337
查看次数

可靠地处理ASP.NET MVC模型绑定错误

我正在使用MVC控制器开发REST API.我想处理所有模型绑定错误,并以用户友好的方式将它们报告给客户端.在我的自定义模型绑定器中,我已经抛出了一个特殊异常,它被异常处理程序认为是安全的并显示给客户端.

但是,当默认模型绑定器看到无效值(例如,asdf对于a int)时,它似乎要么完全忽略它(如果参数不需要),要么抛出一个普通模型ArgumentException(如果需要参数).是否可以可靠地处理这两种情况并获取参数名称和相关错误,而无需手动重写整个活页夹?

我宁愿不显示ArgumentException它是因为它揭示了客户端不应该关心的方法和命名空间名称.ArgumentException如果消息可以避免,我也不会解析消息,并且无法解决完全忽略非必需参数的无效值的问题.

error-handling asp.net-mvc model-binding

7
推荐指数
1
解决办法
2071
查看次数

使用HTML字符串的自定义模型绑定器

我试图将用户输入的HTML字符串从POST绑定到模型对象上的简单字符串变量.如果我使用该[AllowHtml]属性,这工作正常.但是,我想在进入模型之前清理HTML,因此我创建了一个ModelBinder:

public class SafeHtmlModelBinder : DefaultModelBinder
{
    public override object BindModel(ControllerContext controllerCtx, ModelBindingContext bindingCtx)
    {
        var bound = base.BindModel(controllerCtx, bindingCtx);
        // TODO - return a safe HTML fragment string
        return bound;
    }
}
Run Code Online (Sandbox Code Playgroud)

还有一个CustomModelBinderAttribute:

[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = false)]
public class SafeHtmlModelBinderAttribute : CustomModelBinderAttribute
{
    public SafeHtmlModelBinderAttribute()
    {
        binder = new SafeHtmlModelBinder();
    }

    private IModelBinder binder;

    public override IModelBinder GetBinder()
    {
        return binder;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,我使用new属性注释我想要清理的模型属性:

[Required(AllowEmptyStrings = false, ErrorMessage = "You must fill …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc model-binding

7
推荐指数
1
解决办法
3700
查看次数

WebAPI:自定义参数映射

鉴于控制器:

public class MyController : ApiController
{
    public MyResponse Get([FromUri] MyRequest request)
    {
        // do stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

而型号:

public class MyRequest
{
    public Coordinate Point { get; set; }
    // other properties
}

public class Coordinate
{
    public decimal X { get; set; }
    public decimal Y { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

API网址:

/api/my?Point=50.71,4.52
Run Code Online (Sandbox Code Playgroud)

我想在到达控制器之前从查询字符串值转换Point类型的属性.Coordinate50.71,4.52

我在哪里可以加入WebAPI来实现它?

.net c# model-binding asp.net-web-api

7
推荐指数
1
解决办法
4861
查看次数

asp.net mvc从FormCollection填充viewModel

我有很多类似的ViewModel:

public class RequestForSalaryVM : StatementViewModel
{
  // RequestForSalaryVM properties
}

public class ReliefVM : StatementViewModel
{
  // ReliefVM properties
}
Run Code Online (Sandbox Code Playgroud)

和很多类似的方法:

[HttpPost]
public ActionResult SaveRelief(User currentUser, ReliefVM statement)
{
    ReliefVM model = (ReliefVM)SaveModel(currentUser, statement);
    if (model == null)
        return RedirectToAction("List");
    return View("Relief", model);
}

[HttpPost]
public ActionResult SaveRequestForSalary(User currentUser, RequestForSalaryVM statement)
{
    RequestForSalaryVM model = (RequestForSalaryVM)SaveModel(currentUser, statement);
    if (model == null)
        return RedirectToAction("List");
    return View("RequestForSalary", model);
}
Run Code Online (Sandbox Code Playgroud)

我想得到这样的东西:

[HttpPost]
public ActionResult SaveStatement(User currentUser, FormCollection statement, string ViewModelName)
{
  Assembly …
Run Code Online (Sandbox Code Playgroud)

c# asp.net asp.net-mvc model-binding

7
推荐指数
1
解决办法
9892
查看次数

WebAPI自定义模型绑定复杂的抽象对象

这是困难的一个.我有一个从JSON绑定模型的问题.我试图解决多态一致的记录提供的记录,它将解析为(我希望将来能够添加许多记录类型).我试图在调用端点时使用以下示例来解析我的模型,但是此示例仅适用于MVC而不适用于Web API应用程序.

我试图使用IModelBinder和BindModel(HttpActionContext actionContext,ModelBindingContext bindingContext)来编写它.但是我在System.Web.Http命名空间中找不到ModelMetadataProviders的等价物.

感谢任何人都能给予的帮助.

我有一个Web API 2应用程序,它具有以下对象结构.

public abstract class ResourceRecord
{
    public abstract string Type { get; }
}

public class ARecord : ResourceRecord
{
    public override string Type
    {
        get { return "A"; }
    }

    public string AVal { get; set; }

}

public class BRecord : ResourceRecord
{
    public override string Type
    {
        get { return "B"; }
    }

    public string BVal { get; set; }
}

public class RecordCollection
{
    public string …
Run Code Online (Sandbox Code Playgroud)

.net c# asp.net model-binding asp.net-web-api

7
推荐指数
1
解决办法
2万
查看次数

.NET Core 2.2:仅当对象不为 null 时才验证 [required] 属性

我有一个带有嵌套对象的复杂模型。我只希望我的[Required]属性在它们所在的对象不是null. 因此,例如,如果我有一个Home带有Address属性的类,则该Home.Address.Street属性应该仅[required]Addressis not 时为null

代码

在 ASP.NET Core 中,我有一个如下所示的模型:

public class Home
{
    [Required]
    public int Number {get;set;}
    public Address Address {get;set;} // This is not required
}
Run Code Online (Sandbox Code Playgroud)
public class Address
{
   [Required]
   public string Street {get;set;}
   public IFormFile Picture {get;set;}

}
Run Code Online (Sandbox Code Playgroud)

在控制器中,我有一个如下所示的操作方法:

[HttpPost]
public string AddHomes([FromForm]List<Home> homes) 
{
    if(!ModelState.IsValid)
    {
        return BadRequest();
    }
    // Do some saving
    return Ok();  
}
Run Code Online (Sandbox Code Playgroud)

表单有效负载如下所示:

homes.Index: 0 …
Run Code Online (Sandbox Code Playgroud)

c# validation model-binding asp.net-core asp.net-core-webapi

7
推荐指数
1
解决办法
2598
查看次数

ASP.NET Core 绑定到字典

在 ASP.NET Core 中,可以绑定字典值吗?

我在这个相关问题的最新答案 (不是标记正确的答案)中看到它指出:

在 ASP.NET MVC 4 中,默认模型绑定器将使用典型的字典索引器语法 property[key] 绑定字典。

对于 ASP.NET Core MVC(和/或 Razor Pages)来说也是如此吗?

c# dictionary model-binding asp.net-core-mvc asp.net-core

7
推荐指数
1
解决办法
6295
查看次数