此问题出现在.net core 3.1 MVC网站中。
我无法将 POST 绑定到控制器操作(参数始终为空)。数据是从数据库加载的,并且是一个大型的递归结构。如果我删除数据库中的几百行 JSON(大约 2500 行),它将绑定正常。
GET 显示完美。
即使当我将 Action 方法参数从 ViewModel 更改为 IFormCollection 时,它仍然显示为 null。这里有一些我没有意识到的限制吗?如果大小是问题,是否有更好的方法来发布数据?
父视图
<form id="frmAdditionalCodes" name="frmAdditionalCodes" method="post">
<table class="table">
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.Code)
</th>
<th>
@Html.DisplayNameFor(model => model.FullName)
</th>
<th>
@Html.DisplayNameFor(model => model.Description)
</th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td style="width:50px">
@Html.DisplayFor(modelItem => Model.Code)
<input asp-for="@Model.Code" class="form-control" style="display:none" />
</td>
<td style="width:50px">
@Html.DisplayFor(modelItem => Model.FullName)
<input asp-for="@Model.FullName" class="form-control" style="display:none" />
</td>
<td style="width:50px">
@Html.DisplayFor(modelItem => Model.Description)
<input asp-for="@Model.Description" class="form-control" style="display:none" …Run Code Online (Sandbox Code Playgroud) 我正在使用 Razor 页面。我的模型中有两个不需要的字段:
` public class OrderModel : EntityModel, IValidatableObject
{
public string UserId { get; set; }
public int PortfolioId { get; set; }
public int StockId { get; set; }
public int StockHoldingId { get; set; }
public string StockSymbol { get; set; }
[Required]
[DisplayName("Shares Traded")]
public int QuantityTraded { get; set; }`
Run Code Online (Sandbox Code Playgroud)
这两个字段是 UserId 和 StockSymbol。我有表单的以下部分,其中 UserId 和 StockSymbol 不存在,因此为 null 或为空,这是我故意这样做的:
` <div>
Quantity: <input type="number" min="0" asp-for="@Model.Order.QuantityTraded" />
<input type="hidden" asp-for="@Model.Stock.Id" />
<input type="hidden" …Run Code Online (Sandbox Code Playgroud) 通过jquery ajax调用提交数据时遇到一些毛茸茸的问题.基本上,使用jquery 动态添加到屏幕的管理网格中的表单字段的表单值不会在批处理保存命令上更新.
基本上我有一个网格列表,显示保存到数据库的所有当前行,每列包含表单字段.然后我在页面顶部有一个表单,这是您典型的添加另一个详细信息表单.键入值,按"添加",通过jquery json ajax调用将其保存到数据库,并添加表单数据并反映在listing表的新行中.(这部分有效)
我的问题在于您希望在新添加的jquery表行中更改表单值.按下保存按钮时,只会重新保存任何已构建的表格行.您的动态记录格式数据并没有保存.更新调用使用jquery ajax和ASP.NET MVC模型绑定.在"添加"我将返回一个asp.net mvc"局部视图"到我的jquery ajax响应,它被添加到网格列表表中使用$("#tablename tr:last").after(result).
我已经推断出,如上所述,新动态添加的行不会更新.我有一个IList<Item>在我的MVC模型绑定列表中返回到我的控制器操作方法的集合,该方法包含整个项目列表,减去新创建的jquery动态添加表单字段行.这是问题所在,当您执行页面刷新时,行将返回到初始添加时输入的原始表单值.
任何想法为什么我IList<Item>的不包括这些动态添加的行?在Firebug中检查他们在name属性中使用相同的命名修道院,一切都应该没问题.
格雷厄姆.
更新1月5日11:00 GMT + 10:我确实在将模型绑定从IList更改为FormCollection时收到了值.我不想使用FormCollection而不是模型绑定,但是如果我可以通过FormCol正确地获取它,那么问题是什么,为什么不使用IList模型绑定器?我已将数组条目与工作项进行比较,它们都符合相同的标准和值.
为简单起见,假设我有以下抽象基础控制器类:
public abstract class RESTController : Controller
{
public abstract JsonResult List();
public abstract JsonResult Get(Guid id);
public abstract JsonResult Create(object obj);
public abstract JsonResult Update(object obj);
public abstract JsonResult Delete(Guid Id);
}
Run Code Online (Sandbox Code Playgroud)
对于Create&Update方法,我不仅要覆盖Method,还要覆盖参数的类型.
通常我会像这样使用泛型:
public abstract JsonResult Create<T>(T obj);
Run Code Online (Sandbox Code Playgroud)
但是,这是一个MVC操作,并且无法指定类型参数.
我有什么选择?如果我保留它,(object obj)MVC模型绑定器正常工作?
var model = obj as MyViewModel;
Run Code Online (Sandbox Code Playgroud)
这在任何情况下都不是很干净.任何帮助,将不胜感激.
我一直遇到这样的问题,但一劳永逸地想知道发生了什么:)
我有一个简单的ASP.NET MVC视图绑定到视图模型类MemberViewModel.
MemberViewModel包含一个Linq To Sql实体对象,我的表单主要绑定到该对象Member,但是我确实有大约三个其他表单字段绑定到一个名为的子类Member.User.
Member包含有关用户的个人信息,并Member.User包含用户名+密码信息,这两个信息都存储在数据库的单独表中.
现在正如我所说,视图的模型对象使用了一个自定义视图模型类MemberViewModel,其内容如下:
[Bind(Exclude = "EncryptedPassword")]
public class MemberViewModel : ViewModel
{
public Member Member { get; set; }
public string Password { get; set; }
[DisplayName("Confirm Password")]
public string ConfirmPassword { get; set; }
public MemberViewModel() { }
public MemberViewModel(Member member, SelectList countryList)
{
Member = member;
CountryList = countryList;
}
}
Run Code Online (Sandbox Code Playgroud)
你可以看到只有一个引用Member.成员是一个Linq to Sql对象,里面有它的引用User.Password+ ConfirmPassword …
我在MVC 3应用程序中使用Entity Framework 4.3和Code-First.我有一个POST操作,它将实体作为其'参数,然后将实体标记为已修改以更新数据库.它是一个Document实体,它引用了File Type.
[HttpPost]
public ActionResult Example(Document model)
{
// fileType is null, as expected
var fileType = model.FileType;
// attach and mark the entity as modified, save changes
Context.Entry(model).State = EntityState.Modified;
Context.SaveChanges();
// fileType is still null?
fileType = model.FileType;
return View(model);
}
Run Code Online (Sandbox Code Playgroud)
将实体附加到上下文后,我不应该在该实体上延迟加载属性吗?
有趣的是,当我在控制台应用程序中尝试这个时,它似乎工作.
static void Main()
{
// create a new context
var context = new Context();
// get the first document and detach it
var doc = context.Documents.First();
context.Entry(doc).State = EntityState.Detached;
// fileType is …Run Code Online (Sandbox Code Playgroud) 我面临着列出多个表单的问题,包括提交按钮.单击第一个按钮时,它会正确发布,但是当我单击第二个提交按钮时,它会提交一个空集合...下面是我的代码:
Index.cshtml
@model MVCFormsSubmitting.Models.FormsRepository
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Index</h2>
@for (int i = 0; i < Model.UserInfo.Count; i++)
{
using (Html.BeginForm("Index", "Forms", FormMethod.Post, new {name = "Form" + @i}))
{
<b>@Html.EditorFor(m => m.UserInfo[i].Name)</b>
<input name="button @i" type="submit" class="left btn btn-primary" value="Ret navne">
<br/>
}
}
Run Code Online (Sandbox Code Playgroud)
Formsrepository.cs
namespace MVCFormsSubmitting.Models
{
public class Info
{
public int Id { get; set; }
public string Name { get; set; }
public string Age { get; set; }
public string …Run Code Online (Sandbox Code Playgroud) 我想将控制器动作与系统的其他元素完全隔离,因为它是遗留代码的重构,因此可以在系统的各个位置呈现动作.为了隔离局部视图模型中属性名称的任何重叠,我希望在表单名称属性前加上一定的值,并使用BindAttribute来指示ModelBinder将模型属性与适当的前缀表单字段进行匹配.
由于我有一些使用这个模型的动作,我希望我可以将[Bind]装饰器直接放在模型类本身上,避免必须装饰进入每个动作的每个模型参数.但是,这种方法似乎没有注册到绑定器,所以我最终得到了无人居住的属性.另一方面,如果我将装饰器移动到参数,一切都很好.
BindAttribute的文档表明它可以在类上使用.这不是支持的方案吗?
我正在使用自定义模型绑定器,以便在我的模型绑定中放置一些自定义逻辑.
这是我的DTO:
public class TaskDto
{
public int Id { get; set; }
[MaxLength(100), Required]
public string Name { get; set; }
public List<StepDto> Steps { get; set; }
public List<ResourceDTO> Resources { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
步骤DTO:
public class StepDto
{
public int Id { get; set; }
[MaxLength(100)]
public string Description { get; set; }
public StepType StepType { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
ResourceDTO:
public class ResourceDTO
{
public int Id { get; set; }
[MaxLength(250), Required]
public …Run Code Online (Sandbox Code Playgroud) model-binding custom-model-binder asp.net-web-api asp.net-web-api2
我有一个以Angular模板驱动形式的国家/地区
"countries" : [
{
"id":1,
"code":"NL"
},
{
"id":2,
"code":"US"
}
]
Run Code Online (Sandbox Code Playgroud)
我在模型中有一个选定的ID:2
我想将值“ US”绑定到div中。像这样:
<div>{{countries[id==model.countryId].code}}</div>
Run Code Online (Sandbox Code Playgroud)
角度5可能吗?我在网上看到数组的过滤器管道不再存在于角度中。
我让它像这样工作,但这不是很好,我会说:
<ng-container *ngFor="let country of countries">
<div *ngIf="country.id==parentModel.countryId">{{country.code}}</div>
</ng-container>
Run Code Online (Sandbox Code Playgroud) model-binding ×10
.net ×4
asp.net-mvc ×4
c# ×3
.net-core ×1
ajax ×1
angular ×1
arrays ×1
jquery ×1
lazy-loading ×1
model ×1
oop ×1
razor-pages ×1
validation ×1