我有一个简单的表单,其中包含一个项目列表,我想将它们发布到控制器,但有趣的是我不能.除了列表之外,其他所有内容都会正常运行.我在firebug中检查了ajax调用,并且post值是这样的:
Answers[0].IsMissing False
Answers[0].Text Ja
Answers[0].Value 0
Answers[1].IsMissing False
Answers[1].Text Nein
Answers[1].Value 1
Id 1cd14b08-ce3b-4671-8cf8-1bcf69f12b2d
Name Ja/Nein
Run Code Online (Sandbox Code Playgroud)
我有一个具有以下属性的AnwserScheme类:
public string Name { get; set; }
public bool IsMissing { get; set; }
public List<AnswerDisplayItem> Answers { get; set; }
public AnswerScheme()
{
Answers = new List<AnswerDisplayItem>();
}
Run Code Online (Sandbox Code Playgroud)
我有这个视图代码:
@for (int i = 0; i < Model.Answers.Count; i++) {
<tr>
<td>
@Html.HiddenFor(model => Model.Answers[i].IsMissing)
@Html.TextBoxFor(model => Model.Answers[i].Value,
new { @class = "inputValue" })
</td>
<td>
@Html.TextBoxFor(model => Model.Answers[i].Text,
new { @class …Run Code Online (Sandbox Code Playgroud) 我正在使用twitter bootstrap框架,所以为了让EditorFor和DisplayFor方法输出我需要的东西,我为每个类型创建了自定义模板,如字符串,文本,密码等.对于我的登录页面,我想要一个RememberMe bool,所以像以前一样,我创建了以下模板并放入Boolean.cshtml:
@model bool
<div class="control-group">
<div class="controls">
<label class="checkbox">
@Html.CheckBoxFor(m => m, new {@class = "checkbox"})
@Html.LabelFor(m => m)
</label>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
很简单,但是当我使用时:
@Html.EditorFor(m => m.RememberMe)
Run Code Online (Sandbox Code Playgroud)
我得到一个例外,说基础值不能为空:
The model item passed into the dictionary is null, but this dictionary requires a non-null model item of type 'System.Boolean'.
Run Code Online (Sandbox Code Playgroud)
我错过了什么?似乎它应该是直截了当的.模型对象上的字段如下所示:
[Display(Name = "Remember me?")]
public bool RememberMe { get; set; }
Run Code Online (Sandbox Code Playgroud)
谢谢.
更新:所以看起来最终是创建一个空的视图模型对象并将其传递给视图而不是让MVC自己创建一个.
只是想知道是否可以在ASP.NET MVC中更新连接到模型的视图.
我首先使用Entity Framework数据库,为解决方案创建.edmx对象模型.
我已经基于该模型创建了一个新的脚手架模型,该模型创建了:
如果我在模型中添加属性,如何使用new属性自动更新这些视图以表示UI中的更新模型?
所以我正在使用Twitter Bootstrap,我的大多数表单看起来都很棒
<div class="control-group">
@Html.LabelFor(m => m.Prop)
<div class="controls">
@Html.EditorFor(m => m.Prop)
</div>
@Html.ValidationMessageFor(model => model.Prop)
</div>
Run Code Online (Sandbox Code Playgroud)
唯一的问题是收音机按钮和复选框.Twitter Bootstrap调用HTML5样式标签,包括收音机或复选框输入INSIDE标签标签,如下所示
<label class="checkbox">
<input type="checkbox"> Check me out
</label>
Run Code Online (Sandbox Code Playgroud)
如果我不能用@Html创建这些或者重载,我至少可以获得Labelfor创建的文本吗?
<label class="checkbox">
@Html.EditorFor(m=> m.Prop)
@Html.TheVariableThatContainsTheTextThatLabelForUsesFor(m => m.Prop)
</label>
Run Code Online (Sandbox Code Playgroud) 我目前正在使用ASP.NET MVC 3 w/Razor弄湿我的脚,我对渲染HTML输入元素最合适的方式感到困惑.
在我看来,有三种方法可以为Model的属性渲染这些元素:
这样做的推荐方法是什么?我有点担心EditorFor方法,因为我对渲染的HTML没有任何控制权,我认为MVC框架的一个邮件目标是避免WebForms的过度抽象.
你怎么看?这是什么最好的做法?
谢谢!
我可能会为我的应用程序提供许多部分视图,这些部分视图可以在文件夹结构中进行分组.看来我应该这样做,否则我会看一个包含大量文件的View文件夹.所以我假设我应该有类似的东西:
Views ->
Group1 ->
PartialView1
PartialView2
Run Code Online (Sandbox Code Playgroud)
HTML.Partial调用会是什么样的?
HTML.Partial("~/Views/Group1/MyPartialView.cshtml",Model)
Run Code Online (Sandbox Code Playgroud)
我的另一个想法是让一个部分视图文件包含条件代码块,但我怀疑这与PartialViews的所有内容相悖.
最后,如果有一个小的部分视图与一个具有多个条件组件的大型部分视图,那么性能是否存在差异?我想我认为一个文件加载到内存和编译代码而不是多个小文件加载.
谢谢.
编辑:更多信息.
我有一个通用控制器,用于呈现报表的不同部分,因此"介绍"部分的所有部分都将使用"简介"部分进行渲染,即"Introduction.Section1","Introduction.Section2".在我的场景中,我不相信我在章节中有共同的部分,所以我可以使用"文件".想法,但Views文件夹会很大,因此我考虑使用子文件夹.
编辑:谢谢大家.这里有一些很棒的想法.我最后使用了文件夹的想法,因为我在其他地方使用这种方法.但是我确实意识到我需要使用绝对路径,但这不是问题.
我在我的应用程序中遇到问题我正在使用带有剃刀的MVC 3,我希望在表单中获取复选框的值
@using (Html.BeginForm("ConfirmItemAvilabilty", "Order", FormMethod.Post, new { id = "frmConfirmAvilabilty", name = "frmConfirmAvilability" }))
{
foreach (OrderItem orderItem in orderAction.Order.OrderItems)
{
<div class="product">
<ul>
<li>
<div class="productImg">
<img src="@orderItem.Product.Image" width="100px" height="100px"/>
</div>
<div class="centered">
<a href="@orderItem.Product.Link" target="_blank">Link</a> <span>@orderItem.Product.TitleAr</span>
<span>@orderItem.Product.Price</span>
</div>
@if (currentUser.UserTypeEnum == UserTypeEnum.Reseller)
{
<div>
@Html.CheckBox("ChkConfirm", orderItem.IsAvailable, new { id="chkConfirm" ,@class="chkConfirm"})
@Html.Hidden("OrderItemId", orderItem.Id, new { id="hdnConfirm"})
</div>
}
</li>
</ul>
</div>
}
if (currentUser.UserTypeEnum == UserTypeEnum.Reseller)
{
<button>Confirm</button>
}
}
Run Code Online (Sandbox Code Playgroud)
只是我想得到所有选中复选框的值我试图创建一个模型,其中包含我的复选框的值和它下面的隐藏文本的值
public class ItemOrderModel
{
public string ChkConfirm …Run Code Online (Sandbox Code Playgroud)