如何更改HtmlFieldPrefix的索引?
我是Children[0]从EditorFor()获得的,我想制作它Children[@Model.Id]
或者Children[2].Children[4]来自EditorFor()而我想制作它Children[@"ParentModel".Id].Children[@Model.Id]
直到运行时我才会知道实际的前缀.最好有内置的方法来改变它吗?
或者只是弄乱字符串?我还是C#字符串函数的新手.
给一个班级
public class Person
{
// Some general properties
public List<Hobby> Hobbies { get; set; }
}
public class Hobby
{
// Some properties e.g. Name, etc.
}
static List<Hobby> AllHobbies { get; }
Run Code Online (Sandbox Code Playgroud)
是否可以创建一个允许用户使用模型绑定选择他的爱好的视图?
在视图中肯定可以循环AllHobbies并渲染<input type="checkbox" />每个,然后在回发控制器中手动连接所选值.这似乎应该可以用模型绑定,但我不知道如何.
我有一个像这样的ViewModel类:
class CaseModel {
public Boolean ClientPresent { get; set; }
public ClientModel Client { get; set; }
}
class ClientModel {
[Required]
public String FirstName { get; set; }
[Required]
public String LastName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
视图页面包含a <input type="checkbox" name="ClientPresent" />和Html.EditorFor( m => m.Client )部分视图.
这个想法是,当用户提供有关案例(业务域对象)的信息时,他们可以选择不通过取消选中ClientPresent框来指定有关客户端(另一个商业对象)的任何信息.
我希望ASP.NET MVC不对子ClientModel对象执行任何验证 - 但是当表单被POST回服务器时会自动填充CaseModel.Client属性,但是因为FirstName并且LastName(不一定)由用户提供它表示它未通过[Required]验证属性,因此ViewData.ModelState.IsValid返回false并且用户获得验证错误消息.
我怎么能得到它所以CaseModel.Client如果CaseModel.ClientPresent是假的话就不会被证实?
请注意,它ClientModel是一个完全独立的ViewModel类,并在应用程序的其他位置使用(例如在ClientController类中,允许用户编辑客户端的各个实例).
与对应的MVC问题一致,是否有一种方法可以为ASP.NET Web API中的泛型类型创建模型绑定程序?
如果是,如何处理绑定器中的类型检查和实例化?假设模型资料夹是用于URL参数的,请考虑
[ModelBinder(typeof(MyTypeModelBinder))]
public class MyType<T>
{
//...
}
Run Code Online (Sandbox Code Playgroud)
和
public class MyTypeModelBinder : IModelBinder
{
public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)
{
// check if type if valid? Something like this...
if (!(bindingContext.ModelType.IsGenericType && bindingContext.ModelType.GetGenericTypeDefinition() == typeof(MyType<>)))
{
return false;
}
// create instance...using Activator?
}
}
Run Code Online (Sandbox Code Playgroud) 我正在使用KendoUI Grid来显示数据.我的服务器分页工作就像一个魅力.kendo网格中的每个页面更改是对服务器的新ajax请求,服务器返回正确的数据页面.我现在正在尝试进行服务器端排序,但是我无法将模型绑定绑定到排序值.
这就是Kendo Grid的请求:

我的动作方法如下所示:
public JsonResult GetReports(int pageSize, int skip, List<KendoSort> sort)
{
// sort is not being populated with the right data.
}
Run Code Online (Sandbox Code Playgroud)
KendoSort是一个自定义类:
public class KendoSort
{
public string Field { get; set; }
public string Dir { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我知道我做得不对.我的操作方法应如何正确捕获为排序提供的数据?屏幕截图仅显示排序集合中的单个项目,但网格可以传递更多.例如,它还可能包含一个额外的类别:
sort[1][field]: reportName
sort[1][dir]: asc
Run Code Online (Sandbox Code Playgroud)
基本上它会说"按升序排序,然后按升序排序".如何将这些数据导入到我的操作方法中而不必四处寻找Request并手动解析参数?
假设我有这样的模型:
public class Foo {
public List<Bar> Bars { get; set; }
public string Comment { get; set; }
}
public class Bar {
public int Baz { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想要一个Foo让用户编辑Bar项目的视图.但有一个问题:我希望Bar通过局部视图处理编辑.
@model Web.ViewModels.Foo
@using(Html.BeginForm()) {
@Html.Partial("_EditBars", Model.Bars)
@Html.TextAreaFor(m => m.Comment)
...
}
Run Code Online (Sandbox Code Playgroud)
该_EditBars局部视图看起来是这样的:
@model List<Web.ViewModels.Bar>
@for (int i = 0; i < Model.Count; i++) {
@Html.EditorFor(m => Model[i].Baz)
}
Run Code Online (Sandbox Code Playgroud)
我希望这个模型绑定到我的动作,看起来像:
[HttpPost]
public ActionResult Edit(Foo foo) {
// Do stuff
} …Run Code Online (Sandbox Code Playgroud) 我们正在与chargify http://www.chargify.com集成,我需要在我们的MVC4/C#服务器中处理来自Chargify的webhooks.Chargify以(ruby)方式发送POST数据 - 子对象在方括号中分隔,如下所示:
POST /1ffaj2f1 HTTP/1.1
X-Chargify-Webhook-Signature: 526ccfd9677668674eaa6ba5d447e93a
X-Chargify-Webhook-Id: 11238622
User-Agent: Ruby
Host: requestb.in
Content-Type: application/x-www-form-urlencoded
Content-Length: 5159
Connection: close
Accept-Encoding: gzip, deflate
Accept: */*; q=0.5, application/xml
id=11238622&event=payment_success&payload[subscription][activated_at]=2013-05-22%2001%3A25%3A20%20-0400&payload[subscription][balance_in_cents]=0&...
Run Code Online (Sandbox Code Playgroud)
问题是在.NET端,默认模型绑定器不喜欢方括号[ ],而是期望子对象以点分表示方式分隔a.b.c.d=value
我有什么选择让模型绑定器工作?我能想到以下几点:
[]- 希望能够以某种方式委托给默认处理程序.不知道如何解决这个问题 - 但很想听到一些想法.formcollection在Action中使用一个参数.处理表单集合键以基于键形成递归字典.这也意味着我必须处理整个字符串(日期,ids等等)什么是最好的方式,我该如何去做.
我在C#MVC4项目中有这个课程:
public class SaveModel
{
....
[AllowHtml]
public string BodyHtml { get; set; }
[AllowHtml]
public Dictionary<string, string> AdditionalTemplate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
一个控制器动作看起来像这样
public ActionResult SaveTemplate(SaveModel model)
{
....
}
Run Code Online (Sandbox Code Playgroud)
BodyHtml工作正常,但由于某种原因,AllowHtml不能在Dictionary上工作,我收到这样的错误:
A potentially dangerous Request.Form value was detected from
the client (additionalTemplate[0].value="<tr>..."
Run Code Online (Sandbox Code Playgroud)
有没有什么方法可以绕过它,除了通过在我的操作上放置[ValidateInput(false)]来禁用整个请求的验证?
[ValidateInput(false)]
public ActionResult SaveTemplate(SaveModel model)
{
....
}
Run Code Online (Sandbox Code Playgroud) 如何BindAttribute在控制器中包含或排除嵌套属性?
我有一个'Stream'模型:
public class Stream
{
public int ID { get; set; }
[Required]
[StringLength(50, ErrorMessage = "Stream name cannot be longer than 50 characters.")]
public string Name { get; set; }
[Required]
[DataType(DataType.Url)]
public string URL { get; set; }
[Required]
[Display(Name="Service")]
public int ServiceID { get; set; }
public virtual Service Service { get; set; }
public virtual ICollection<Event> Events { get; set; }
public virtual ICollection<Monitor> Monitors { get; set; }
public virtual ICollection<AlertRule> AlertRules { get; …Run Code Online (Sandbox Code Playgroud) 我刚刚解除了Form::model存在的约束力,我很高兴(这太棒了).我每次使用文本,电子邮件,甚至选择它都会尝试它.
我的问题是,它能用于<select multiple>吗?如果是这样,我该如何使用它以及在数据库中保存数组的正确方法是什么?(这可能很糟糕,但我将数组的所有选项与分隔符连接起来并将其保存为文本,我确定这不是正确的方法).
model-binding ×10
c# ×6
asp.net-mvc ×4
.net ×1
ajax ×1
asp.net ×1
http-post ×1
kendo-ui ×1
laravel ×1
laravel-4 ×1
php ×1
razor ×1
select ×1
validation ×1