想象一个常见的场景,这是我遇到的更简单的版本.我实际上有几层进一步筑巢......
但这就是场景
主题包含列表类别包含列表产品包含列表
我的控制器提供了一个完全填充的主题,包含该主题的所有类别,此类别中的产品及其订单.
订单集合有一个名为Quantity(以及许多其他)的属性需要可编辑.
@model ViewModels.MyViewModels.Theme
@Html.LabelFor(Model.Theme.name)
@foreach (var category in Model.Theme)
{
@Html.LabelFor(category.name)
@foreach(var product in theme.Products)
{
@Html.LabelFor(product.name)
@foreach(var order in product.Orders)
{
@Html.TextBoxFor(order.Quantity)
@Html.TextAreaFor(order.Note)
@Html.EditorFor(order.DateRequestedDeliveryFor)
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我使用lambda然后我似乎只获得对顶级Model对象的引用,"Theme"不是foreach循环中的那些.
是我试图在那里做甚至可能还是我高估或误解了什么是可能的?
有了上面我在TextboxFor,EditorFor等上得到了一个错误
CS0411:无法从用法中推断出方法'System.Web.Mvc.Html.InputExtensions.TextBoxFor(System.Web.Mvc.HtmlHelper,System.Linq.Expressions.Expression>)'的类型参数.尝试显式指定类型参数.
谢谢.
在过去,我通过让所有控制器继承公共基本控制器,以全局方式将常见属性(例如当前用户)粘贴到ViewData/ViewBag上.
这使得我可以在基本控制器上使用IoC,而不仅仅是为这些数据扩展到全局共享.
我想知道是否有另一种方法将这种代码插入MVC管道?
我正在使用包含List作为属性的模型.我正在使用从SQL Server中获取的项目填充此列表.我希望List隐藏在视图中并传递给POST操作.稍后我可能想要使用jQuery向此List添加更多项目,这使得数组不适合稍后进行扩展.通常你会用
@Html.HiddenFor(model => model.MyList)
Run Code Online (Sandbox Code Playgroud)
要完成此功能,但由于某种原因,POST中的List始终为null.
很简单的问题,任何人都知道为什么MVC会像这样?
没有太多运气,我在Razor中有以下if/else语句,效果很好
<small>
@if(deletedView){
@:Deleted
}
else {
@:Created
} by
</small>
Run Code Online (Sandbox Code Playgroud)
我想做这样的事情:
<small>
@(deletedView) ? @:Deleted : @:Created by
</small>
Run Code Online (Sandbox Code Playgroud)
但那失败了.什么是正确的语法?
我有2个型号:
public class Person
{
public int PersonID { get; set; }
public string PersonName { get; set; }
}
public class Order
{
public int OrderID { get; set; }
public int TotalSum { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想在SINGLE视图中编辑BOTH类的对象,所以我需要这样的东西:
@model _try2models.Models.Person
@model _try2models.Models.Order
@using(Html.BeginForm())
{
@Html.EditorFor(x => x.PersonID)
@Html.EditorFor(x => x.PersonName)
@Html.EditorFor(x=>x.OrderID)
@Html.EditorFor(x => x.TotalSum)
}
Run Code Online (Sandbox Code Playgroud)
当然,这不起作用:.cshtml文件中只允许一个"模型"语句.可能有一些解决方法吗?
我的模型有一个必须可以为空的布尔值
public bool? Foo
{
get;
set;
}
Run Code Online (Sandbox Code Playgroud)
所以在我的Razor cshtml中
@Html.CheckBoxFor(m => m.Foo)
Run Code Online (Sandbox Code Playgroud)
除了不起作用.也没有(bool)施放它.如果我做
@Html.CheckBoxFor(m => m.Foo.Value)
Run Code Online (Sandbox Code Playgroud)
这不会产生错误,但在发布时它不会绑定到我的模型,并且foo设置为null.什么是在页面上显示Foo并使其在帖子上绑定到我的模型的最佳方式?
这是有效的,因为它返回字符串中部分视图呈现的结果:
@Html.Partial("Path/to/my/partial/view")
Run Code Online (Sandbox Code Playgroud)
但我更喜欢使用RenderPartial,似乎我需要写:
@{Html.RenderPartial("Path/to/my/partial/view");}
Run Code Online (Sandbox Code Playgroud)
代替:
@Html.RenderPartial("Path/to/my/partial/view");
Run Code Online (Sandbox Code Playgroud)
让它工作.错误信息:
Compiler Error Message: CS1502: The best overloaded method match for 'System.Web.WebPages.WebPageExecutingBase.Write(System.Web.WebPages.HelperResult)' has some invalid arguments
Run Code Online (Sandbox Code Playgroud)
如果有更好的方法而不是@{...}只为一个方法调用打开代码块?
我有一个表单上传,但我想传递我的数据库的模型信息,以保存具有不同名称的文件.
这是我的剃刀观点:
@model CertispecWeb.Models.Container
@{
ViewBag.Title = "AddDocuments";
}
<h2>AddDocuments</h2>
@Model.ContainerNo
@using (Html.BeginForm("Uploadfile", "Containers", FormMethod.Post,
new { enctype = "multipart/form-data" }))
{
<input type='file' name='file' id='file' />
<input type="submit" value="submit" />
}
Run Code Online (Sandbox Code Playgroud)
这是我的控制器:
[HttpPost]
public ActionResult Uploadfile(Container containers, HttpPostedFileBase file)
{
if (file.ContentLength > 0)
{
var fileName = Path.GetFileName(file.FileName);
var path = Path.Combine(Server.MapPath("~/App_Data/Uploads"),
containers.ContainerNo);
file.SaveAs(path);
}
return RedirectToAction("Index");
}
Run Code Online (Sandbox Code Playgroud)
模型信息不会传递给控制器.我已经读过我可能需要更新模型,我该怎么做?
Html.Textbox和Html.TextboxFor有什么区别?
什么是 routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
我在项目中找不到任何.axd文件,我可以删除此路由规则吗?
asp.net-mvc-3 ×10
razor ×6
asp.net-mvc ×5
asp.net ×2
c# ×2
autofac ×1
hidden-field ×1
nullable ×1
view ×1
viewdata ×1
viewmodel ×1