C#-ASP.NET CORE MVC选择标记帮助器-如何在不使用ModelView的情况下设置选择的值
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#-ASP.NET CORE MVC选择标记帮助器-如何在不使用ModelView的情况下设置选择的值,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4988字,纯文字阅读大概需要8分钟。
内容图文
![C#-ASP.NET CORE MVC选择标记帮助器-如何在不使用ModelView的情况下设置选择的值](/upload/InfoBanner/zyjiaocheng/666/a17421938f574f669732af46d3dada90.jpg)
在ASP.NET MVC Core项目的以下代码中,Get操作方法Test(…)显示年份的下拉列表.默认情况下,该下拉列表将列表中的第一年(即2000年)显示为选定值.如果要在与选定值相同的列表中显示特定年份,如何在不使用ViewModel技术的情况下通过操作方法Test(…)实现它?选择标记帮助器或DropdownList html帮助器的解决方案都可以-但必须从action方法中设置Selected值.
简而言之,您如何将特定年份设置为此列表中的“选定值”:ViewBag.YearsList = Enumerable.Range(2000,15).Select(g => new SelectListItem {Value = g.ToString(),Text = g.ToString()}).ToList();
楷模:
public class BloggingContext : DbContext
{
public BloggingContext(DbContextOptions<BloggingContext> options)
: base(options)
{ }
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
}
public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; }
public IList<Post> Posts { get; set; }
}
public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public int PostYear { get; set; }
public int BlogId { get; set; }
public Blog Blog { get; set; }
}
控制器:仅显示相关的动作方法.
public class BlogsController : Controller
{
private readonly BloggingContext _context;
public BlogsController(BloggingContext context)
{
_context = context;
}
// GET: Blogs
public async Task<IActionResult> Index()
{
return View(_context.Blogs.ToList());
}
// GET: /Blogs/Test
[HttpGet]
public async Task<IActionResult> Test(string returnUrl = null)
{
ViewData["ReturnUrl"] = returnUrl;
ViewBag.YearsList = Enumerable.Range(2000, 15).Select(g => new SelectListItem { Value = g.ToString(), Text = g.ToString() }).ToList();
//return View(await _context.Blogs.Include(p => p.Posts).ToListAsync());
var qrVM = from b in _context.Blogs
join p in _context.Posts on b.BlogId equals p.BlogId into bp
from c in bp.DefaultIfEmpty()
select new BlogsWithRelatedPostsViewModel { BlogID = b.BlogId, PostID = (c == null ? 0 : c.PostId), Url = b.Url, Title = (c == null ? string.Empty : c.Title), Content = (c == null ? string.Empty : c.Content) };
return View(await qrVM.ToListAsync());
}
// POST: /Blogs/Test
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Test(IList<BlogsWithRelatedPostsViewModel> model, string GO, int currentlySelectedIndex, string returnUrl = null)
{
ViewData["ReturnUrl"] = returnUrl;
ViewBag.YearsList = Enumerable.Range(2000, 15).Select(g => new SelectListItem { Value = g.ToString(), Text = g.ToString() }).ToList();
if (!string.IsNullOrEmpty(GO))
{
var qrVM = from b in _context.Blogs
join p in _context.Posts on b.BlogId equals p.BlogId into bp
from c in bp.DefaultIfEmpty()
where c == null? true : c.PostYear.Equals(currentlySelectedIndex)
select new BlogsWithRelatedPostsViewModel { BlogID = b.BlogId, PostID = (c == null ? 0 : c.PostId), Url = b.Url, Title = (c == null ? string.Empty : c.Title), Content = (c == null ? string.Empty : c.Content) };
return View(await qrVM.ToListAsync());
}
else if (ModelState.IsValid)
{
foreach (var item in model)
{
var oPost = _context.Posts.Where(r => r.PostId.Equals(item.PostID)).FirstOrDefault();
if (oPost != null)
{
oPost.Title = item.Title;
oPost.Content = item.Content;
oPost.PostYear = currentlySelectedIndex;
oPost.BlogId = item.BlogID; //according to new post below the blogId should exist for a newly created port - but just in case
}
else
{
if (item.PostID == 0)
{
Post oPostNew = new Post { BlogId = item.BlogID, Title = item.Title, Content = item.Content, PostYear = currentlySelectedIndex }; //need to use currentlySelectedIndex intead of item.FiscalYear in case of adding a record
_context.Add(oPostNew);
}
}
}
await _context.SaveChangesAsync();
//return RedirectToLocal(returnUrl);
return View(model);
}
// If we got this far, something failed, redisplay form
return View();
}
}
Test.cshtml视图
@model IList<ASP_Core_Blogs.Models.BlogPostViewModels.BlogsWithRelatedPostsViewModel>
<div class="row">
<div class="col-md-12">
<form asp-controller="Blogs" asp-action="Test" asp-route-returnurl="@ViewData["ReturnUrl"]" method="post">
@{
IEnumerable<SelectListItem> yearsList = (IEnumerable<SelectListItem>)ViewBag.YearsList;
var currentlySelectedIndex = 0; // Currently selected index (usually will come from model)
}
<strong>Select a Post Year</strong>
<h6>Choose a year and a URL to begin:</h6>
<label>Year:</label><select asp-for="@currentlySelectedIndex" asp-items="yearsList"></select><input type="submit" class="btn btn-default" name="GO" value="GO" />
<table class="table">
<thead>
<tr>
<th></th>
<th></th>
<th>Url</th>
<th>Title</th>
<th>Content</th>
</tr>
</thead>
<tbody>
@for (int i=0; i< Model.Count(); i++)
{
<tr>
<td>@Html.HiddenFor(r => r[i].BlogID)</td>
<td>@Html.HiddenFor(r => r[i].PostID)</td>
<td>
@Html.TextBoxFor(r => r[i].Url)
</td>
<td>
@Html.TextBoxFor(r => r[i].Title)
</td>
<td>
@Html.TextBoxFor(r => r[i].Content)
</td>
</tr>
}
</tbody>
</table>
<button type="submit" class="btn btn-default">Save</button>
</form>
</div>
</div>
解决方法:
由于要避免使用视图模型,因此不能使用DropDownListFor,但是可以使用DropDownList
@Html.DropDownList("fieldname", new SelectList(ViewBag.YearsList, ViewBag.SelectedYear))
内容总结
以上是互联网集市为您收集整理的C#-ASP.NET CORE MVC选择标记帮助器-如何在不使用ModelView的情况下设置选择的值全部内容,希望文章能够帮你解决C#-ASP.NET CORE MVC选择标记帮助器-如何在不使用ModelView的情况下设置选择的值所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。