gpt4 book ai didi

包含模型列表的模型(MVC-3、Razor)

转载 作者:行者123 更新时间:2023-12-03 01:24:23 28 4
gpt4 key购买 nike

这个问题已经困扰我两天了。有一些类似的帖子,但没有一个能完全解决我的问题。

使用 MVC-3、Razor 语法:

-- 编辑.cshtml--

@using (Html.BeginForm("Edit", "My", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<!-- Some fields... -->
<div class="editor-field">
@Html.TextAreaFor(m => m.LongDescription)
@Html.ValidationMessageFor(m => m.LongDescription)
</div>

<!-- Some more fields work... Including picture upload (summary).-->
<input name="button" type="submit" value="Add Picture" />

<!-- Picture Item display -->
@foreach(var thumbnail in Model.ThumbnailImagePathAndNames)
{
<img src="@Url.Content(@thumbnail.ThumbnailPicturePath)" alt="" width="200" />
@Html.RadioButtonFor(o=>o.SelectedImage, @thumbnail.ImageGUID) Primary Picture
<!-- Checkbox to mark for deletion -->
@Html.CheckBoxFor(o=>thumbnail.Delete) Delete ???????? <!---- Here is a problem - I don't understand how this should work -->
}
<input id="Submit1" name="button" type="submit" value="Complete Edit!" />
}

-- MyController.cs --

 [HttpPost]
public ActionResult Edit(String button, HttpPostedFileBase file, MyMainModel model)
{
// if button = submit picture, work with picture here and break(long story)

// save model data
// if valid, save and redirect


// not valid or error, load up view like normal but with error messages
model.LoadThumbnails();
return View(model);

}

-- MyMainModel.cs --

public class MyMainModel
{
// some properties...
public Guid? SelectedImage { get; set; }

[Display(Name = "Detailed Description")]
public String LongDescription { get; set; }

// some more properties....


// and finally my list of models
public IList<ThumbnailModel> ThumbnailImagePathAndNames { get; set; }

public void LoadThumbnails()
{
// load up initial thumbnail models
this.ThumbnailImagePathAndNames = new List<ThumbnailModel>(readDataService.GetThumbnailModels(this.SomeID));
}
}

-- ThumbnailModels.cs --

public class ThumbnailModel
{
public Guid ImageGUID { get; set; }
public String FullSizePicturePath { get; set; }
public String ThumbnailPicturePath { get; set; }

public bool Delete { get; set; }
}

那么问题出在哪里呢?好吧,当“完成编辑!”时按钮被按下,MyController 的 Edit 被调用,正如预期的那样,MyMainModle 的所有数据都完好无损......除了 ThumbnailModel 的列表 - 结果都是 null。

这应该如何完成?我尝试了许多不同的方法,包括制作可编辑模板和使用 EditFor(o=>... 都无济于事(这变得令人困惑,因为我不知道 EditFor 是否应该用于整个集合或只是集合中的单个项目 - 我尝试了两种方法)。所有方法都可以工作,直到我添加了删除复选框的复杂性,因此需要检索 ThumbnailModel 列表来检查内部删除属性值。

感谢大家阅读并尝试理解这一点。

[免责声明 - 一些变量和方法名称已更改以保护无辜的程序。许多代码已被剥离并被注释代码取代。]

最佳答案

这是我用来说明一些概念的示例:

型号:

public class MyMainModel
{
public Guid? SelectedImage { get; set; }
public string LongDescription { get; set; }

public IEnumerable<ThumbnailModel> ThumbnailImagePathAndNames { get; set; }

public HttpPostedFileBase File { get; set; }
}

public class ThumbnailModel
{
public Guid ImageGUID { get; set; }
public bool Delete { get; set; }
}

Controller :

public class HomeController : Controller
{
public ActionResult Index()
{
var model = new MyMainModel
{
// TODO: fetch from the repository instead of hardcoding
ThumbnailImagePathAndNames = new[]
{
new ThumbnailModel { ImageGUID = Guid.NewGuid() },
new ThumbnailModel { ImageGUID = Guid.NewGuid() },
new ThumbnailModel { ImageGUID = Guid.NewGuid() },
}
};
return View(model);
}

[HttpPost]
public ActionResult Index(MyMainModel model)
{
... the model will be properly bound here
}
}

查看:

@model AppName.Models.MyMainModel
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
@using (Html.BeginForm("index", "home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<div class="editor-field">
@Html.TextAreaFor(m => m.LongDescription)
@Html.ValidationMessageFor(m => m.LongDescription)
</div>
<input type="file" name="file" />
<!-- Use different names for the upload and complete submit
buttons so that you can distinguish which one was clicked
in the POST action
-->
<input name="upload" type="submit" value="Add Picture" />

@Html.EditorFor(x => x.ThumbnailImagePathAndNames)
<input name="complete" type="submit" value="Complete Edit!" />
}

编辑器模板:(~/Views/Home/EditorTemplates/ThumbnailModel.cshtml):

@model AppName.Models.ThumbnailModel
<!-- Pass the image id as hidden field -->
@Html.HiddenFor(x => x.ImageGUID)
@Html.CheckBoxFor(x => x.Delete)

关于包含模型列表的模型(MVC-3、Razor),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4720330/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com