标签: model-binding

绑定到MVC中的SelectList

我再一次面对"这不应该是这个?*!#hard"的情况.

问题:我想在MVC中使用表单来创建对象.对象的一个​​元素是一组有限的选择 - 下拉列表的完美候选者.

但是如果我在我的模型中使用SelectList,并在我的View中使用下拉列表,然后尝试将模型发布回我的Create方法,则会收到错误"Missing Method Exception:No Parameterless constructor for this object".探索MVC源代码,似乎为了绑定到模型,Binder必须能够首先创建它,并且它不能创建SelectList,因为它没有默认的构造函数.

这是简化的代码:对于模型:

public class DemoCreateViewModel
{
    public SelectList Choice { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

对于控制器:

//
// GET: /Demo/Create

public ActionResult Create()
{
    DemoCreateViewModel data = new DemoCreateViewModel();
    data.Choice = new SelectList(new string[] { "Choice1", "Choice2", "Choice3" });
    ViewData.Model = data;
    return View();
}

//
// POST: /Demo/Create

[HttpPost]
public ActionResult Create(DemoCreateViewModel form)
{
    try
    {
        // TODO: Add insert logic here

        return RedirectToAction("Index");
    }
    catch
    {
        return View(); …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc model-binding selectlist

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

我可以将枚举传递给控制器​​,以便Model Binder绑定它吗?

如果是这样,我应该如何传递参数?匹配枚举名称的字符串可以吗?如果我传递的是与枚举项匹配的下拉框,这将非常方便.

如果我能够在提交数据时轻松绑定到枚举,那么使用本答案中提供的解决方案会很有用.

c# asp.net-mvc enums model-binding

11
推荐指数
1
解决办法
8688
查看次数

ASP.NET MVC Model Binder返回null对象

我遇到一个问题,每次我将表单发回到[HttpPost]我的控制器动作版本时,ModelBinder都会返回一个null对象.我无法理解为什么.如果我更改签名以使用FormCollection替代,我可以看到已经设置了所有正确的密钥.有人可以帮我指出这里有什么问题,因为我无法发现它.

以下是处理我的观点的模型

public class DeviceModel
{
    public int Id { get; set; }

    [Required]
    [Display(Name = "Manufacturer")]
    public int ManufacturerId { get; set; }

    [Required]
    [Display(Name = "Model")]
    [StringLength(20)]
    public string Model { get; set; }

    [StringLength(50)]
    [Display(Name = "Name")]
    public string Name { get; set; }

    [StringLength(50)]
    [Display(Name = "CodeName")]
    public string CodeName { get; set; }

    public int? ImageId { get; set; }
}

public class DeviceCreateViewModel : DeviceModel
{
    public IEnumerable<SelectListItem> Manufacturers { …
Run Code Online (Sandbox Code Playgroud)

asp.net model-binding asp.net-mvc-3

11
推荐指数
1
解决办法
8716
查看次数

具有复杂类型嵌套对象的bind属性include和exclude属性

好的,这很奇怪.我不能用BindAttributeIncludeExclude性质与ASP.NET MVC复杂类型嵌套对象.

这是我做的:

这是我的模特:

public class FooViewModel {

    public Enquiry Enquiry { get; set; }
}

public class Enquiry {

    public int EnquiryId { get; set; }
    public string Latitude { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

HTTP Post动作:

[ActionName("Foo"), HttpPost]
public ActionResult Foo_post(
    [Bind(Include = "Enquiry.EnquiryId")]
    FooViewModel foo) {

    return View(foo);
}
Run Code Online (Sandbox Code Playgroud)

视图:

@using (Html.BeginForm()) {

    @Html.TextBoxFor(m => m.Enquiry.EnquiryId)
    @Html.TextBoxFor(m => m.Enquiry.Latitude)

    <input type="submit" value="push" />
}
Run Code Online (Sandbox Code Playgroud)

根本不起作用.如果我按照此处的说明定义BindAttributefor Enquiry类,我可以只做这项工作:

如何在复杂的嵌套对象上使用[Bind(Include ="")]属性?

asp.net-mvc defaultmodelbinder model-binding asp.net-mvc-3

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

Spring MVC的动态表单和数据绑定

在我的Spring MVC应用程序中,我需要实现一个动态的问卷形式:我有N个问题,每个我都有3个选项.

所以在我的页面中我会有这样的东西:

|    Question 1   |   1   |   2   |   3   |
|    Question 2   |   1   |   2   |   3   |
|    Question 3   |   1   |   2   |   3   |
|    ...          |   1   |   2   |   3   |
|    Question N   |   1   |   2   |   3   |
Run Code Online (Sandbox Code Playgroud)

问题存储在数据库中,对于我将使用单选按钮的选项.我将使用forEach标签来修改动态行,但我不知道如何ModelAttribute在这种情况下发布数据和处理绑定...

对于我的模型属性类,这可能是一个很好的结构?是否可以在Spring MVC中使用动态形式的绑定?

java spring spring-mvc model-binding modelattribute

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

.NET模型绑定器

我试图在我的ASP.NET MVC 4项目中创建自定义模型绑定器.但我对IModelBinder iterfaces感到困惑.有3个 IModelBinder接口VS可以找到.在以下命名空间中.

using System.Web.Http.ModelBinding;
using System.Web.Mvc;
using System.Web.ModelBinding;


bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)
object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext);
bool BindModel(ModelBindingExecutionContext modelBindingExecutionContext, ModelBindingContext bindingContext);
Run Code Online (Sandbox Code Playgroud)

所有相关的类,如ModelBindingContext,ModelMetadata和其他类也都是重复的.我和我的朋友无法找出这种可怕的代码重复的目的是什么.为什么Microsoft开发人员不提取共享程序集的公共类?据我所知,MVC中使用了一个接口,Web Api中有一个接口,第三个版本的目的是什么?这个接口是独立的还是以某种方式相互连接?

.net c# asp.net model-binding

11
推荐指数
1
解决办法
2689
查看次数

自定义DTO内的映射请求参数和字段?

我有以下课程:

public class MyDTO { 

       private String kiosk;
       ...
}
Run Code Online (Sandbox Code Playgroud)

和以下网址:

http://localhost:1234/mvc/controllerUrl?kiosk=false
Run Code Online (Sandbox Code Playgroud)

并遵循控制器方法:

@RequestMapping(method = RequestMethod.GET, produces = APPLICATION_JSON)
@ResponseBody
public ResponseEntity<List<?>> getRequestSupportKludge(final MyDTO myDTO, BindingResult bindingResult) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

现在它工作得很好,布尔字段正确解析.

现在url参数已经改变如下:

http://localhost:1234/mvc/controllerUrl?new_kiosk=false
Run Code Online (Sandbox Code Playgroud)

我不想在DTO中更改参数名称.有没有办法说spring知道new_kiosk请求参数值应该放在kiosk字段中?

spring spring-mvc model-binding spring-mvc-initbinders

11
推荐指数
1
解决办法
5196
查看次数

当我有一个可以为null的参数时,ModelState.IsValid为false

我在一个全新的MVC Web API项目中重现了我遇到的问题.

这是默认代码,略有修改.

public string Get(int? id, int? something = null)
{
    var isValid = ModelState.IsValid;
    return "value";
}
Run Code Online (Sandbox Code Playgroud)

如果你去,http://localhost/api/values/5?something=123那么这很好,isValid是true.

如果你去http://localhost/api/values/5?something=那么isValid是false.

我遇到的问题是,如果为可以为空的项提供null或省略的值,ModelState.IsValid会标记验证错误 "A value is required but was not present in the request."

ModelState字典也如下所示:

在此输入图像描述

有两个条目something,一个可以为空,我不确定它是否重要.

知道如何解决这个问题,以便在省略可空参数或提供为null时模型是有效的吗?我在我的web api中使用模型验证,如果每个带有可为空参数的方法都会产生模型错误,它就会破坏它.

asp.net-mvc model-binding asp.net-web-api

11
推荐指数
1
解决办法
5701
查看次数

绑定功能的ngModel在ng2中不起作用

如果我在组件的模板中执行类似的操作:

<input [(ngModel)]="myProperty"></input>
Run Code Online (Sandbox Code Playgroud)

然后它工作,但如果我用我的组件中的函数执行它不会:

<input [(ngModel)]="getMyProperty()"></input>
Run Code Online (Sandbox Code Playgroud)

是傻瓜.在RC6上测试过.为什么?

model-binding angular-ngmodel angular

11
推荐指数
1
解决办法
6807
查看次数

.Net核心模型绑定JSON Post到Web API

刚刚使用.NET Core启动了一个新项目.添加了我的Web API控制器和相关方法.使用Postman我创建了一个JSON对象并将其发布到我的控制器方法.请记住,JSON对象与控制器方法中的Object参数完全匹配.

在调试模式下,我可以看到对象,它不是null,属性在那里,但是prop值默认为它们的代表类型,0for int等.

我之前从未见过这种行为......所以我使用了完全相同的代码和对象,并在一个带有Web API 2控制器的MVC项目中进行了复制.

我缺少什么,我不能在.NET Core中POST JSON和模型绑定吗?

阅读这篇文章似乎我不能,除非我发送形式POST或查询字符串变量顺便说一句工作正常.

https://lbadri.wordpress.com/2014/11/23/web-api-model-binding-in-asp-net-mvc-6-asp-net-5/

JSON:

{
   "id": "4",
   "userId": "3"
   "dateOfTest": "7/13/2017"
}
Run Code Online (Sandbox Code Playgroud)

方法:

[HttpPost]
[Route("test1")]
[AllowAnonymous]
public IActionResult Test(Class1 data)
{
    return Ok();
}
Run Code Online (Sandbox Code Playgroud)

c# model-binding asp.net-web-api2 asp.net-core asp.net-core-webapi

11
推荐指数
3
解决办法
2万
查看次数