ahmedbelal Ответов: 1

У меня есть проблема в коде-сначала в проекте ASP.NET MVC, когда я нажимаю кнопку Создать действие


У меня есть проблема в коде-сначала в проекте asp.net mvc когда я нажимаю кнопку Создать действие или изменить действие появляется сообщение об ошибке
"InvalidOperationException: The following sections have been defined but have not been rendered by the page at '/Views/Shared/_Layout.cshtml': 'Scripts'. To ignore an unrendered section call IgnoreSection("sectionName")."
но все действия работают хорошо и мои renderbody(); написано в моем макете

Что я уже пробовал:

мой код
public class NewsController : Controller
{
    private readonly NewsContext _context;
    
    public NewsController(NewsContext context)
    {
        _context = context;
    }
    
    // GET: News
    public async Task<iactionresult> Index()
    {
        return View(await _context.News.ToListAsync());
    }
    
    // GET: News/Details/5
    public async Task<iactionresult> Details(int? id)
    {
        if (id == null)
        {
            return NotFound();
        }
    
        var news = await _context.News
            .FirstOrDefaultAsync(m => m.NewsId == id);
        if (news == null)
        {
            return NotFound();
        }
    
        return View(news);
    }
    
    // GET: News/Create
    public IActionResult Create()
    {
        return View();
    }
    
    // POST: News/Create
    // To protect from overposting attacks, enable the specific properties you want to bind to, for 
    // more details, see http://go.microsoft.com/fwlink/?LinkId=317598.
    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<iactionresult> Create([Bind("NewsId,title,DateTime,Image,Topic,CatgID")] News news)
    {
        if (ModelState.IsValid)
        {
            _context.Add(news);
            await _context.SaveChangesAsync();
            return RedirectToAction(nameof(Index));
        }
        return View(news);
    }
    
    // GET: News/Edit/5
    public async Task<iactionresult> Edit(int? id)
    {
        if (id == null)
        {
            return NotFound();
        }
    
        var news = await _context.News.FindAsync(id);
        if (news == null)
        {
            return NotFound();
        }
        return View(news);
    }
    
    // POST: News/Edit/5
    // To protect from overposting attacks, enable the specific properties you want to bind to, for 
    // more details, see http://go.microsoft.com/fwlink/?LinkId=317598.
    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<iactionresult> Edit(int id, [Bind("NewsId,title,DateTime,Image,Topic,CatgID")] News news)
    {
        if (id != news.NewsId)
        {
            return NotFound();
        }
    
        if (ModelState.IsValid)
        {
            try
            {
                _context.Update(news);
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!NewsExists(news.NewsId))
                {
                    return NotFound();
                }
                else
                {
                    throw;
                }
            }
            return RedirectToAction(nameof(Index));
        }
        return View(news);
    }

мой взгляд
@model NewsApp.Models.News

@{
    ViewData["Title"] = "Create";
     Layout = "~/Views/Shared/_Layout.cshtml";
}

<h1>Create</h1>

<h4>News</h4>
<hr>
<div class="row">
    <div class="col-md-4">
        
            <div class="text-danger"></div>
            <div class="form-group">
                
                
                <span class="text-danger"></span>
            </div>
            <div class="form-group">
                
                
                <span class="text-danger"></span>
            </div>
            <div class="form-group">
                
                
                <span class="text-danger"></span>
            </div>
            <div class="form-group">
                
                
                <span class="text-danger"></span>
            </div>
            <div class="form-group">
                
                
                <span class="text-danger"></span>
            </div>
            <div class="form-group">
                
            </div>
        
    </div>
</div>

<div>
    <a>Back to List</a>
</div>

@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}

1 Ответов

Рейтинг:
0

Sandeep Mewara

Один подобная дискуссия[^] - цитирование оттуда для удобства ссылки:

Это означает, что вы определили раздел в своем основном макете.cshtml, но вы ничего не включили для этого раздела в свой вид.

Если ваш _Layout.cshtml есть что-то вроде этого:

@RenderSection("scripts")

Затем все представления, использующие этот макет, должны включать раздел @с тем же именем (даже если содержимое раздела пусто):
@{
    ViewBag.Title = "Title";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
@section scripts{
    // Add something here
}

В качестве альтернативы вы можете установить required в false, тогда вам не нужно будет добавлять раздел в каждый вид,
@RenderSection("scripts", required: false)

или же вы можете обернуть @RenderSection в блок if,
@if (IsSectionDefined("scripts"))
{
    RenderSection("scripts");
}


ahmedbelal

спасибо моему дорогому другу бу, что я сделал @Renderbody() ??

ahmedbelal

спасибо Мистер Сэндип все в порядке

Sandeep Mewara

:большой палец вверх: