您好我正在尝试为我网站上的一些物理文章构建评论部分,现在我想点击
<a asp-route-articleid="smth" asp-action="Create">Create New</a>
它会创建一个包含网址的页面:http://localhost:65401/Physics/Create?articleid=smth
<h2>Create</h2>
<form asp-action="Create">
<div class="form-horizontal">
<h4>Physics</h4>
<hr />
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="CommentContext" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="CommentContext" class="form-control" />
<span asp-validation-for="CommentContext" class="text-danger" />
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
</form>
现在我的问题:如何在控制器中提取该文章?到目前为止我试过这个
public async Task<IActionResult> Create([Bind("ID,CommentContext,UserName,ArticleID")] Physics physics, string articleid)
{
if (ModelState.IsValid)
{
physics.UserName = HttpContext.User.Identity.Name;
physics.ArticleID = articleid;
_context.Add(physics);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
return View(physics);
}
到目前为止,还有其他绝望的尝试。任何帮助,将不胜感激。
编辑:
使用HttpContext.Request.GetEncodedUrl();
获取http://localhost:65401/Physics/Create
,但关键是我需要articleid=smth
值。
解决方案:
Request.Headers["Referer"].ToString();
将返回包含'articleid = smth'值的完整网址字符串。
答案 0 :(得分:0)
如果我理解我的问题,那么你有以下问题。
您在一个页面上创建了按钮并生成了您描述的链接。 http://localhost:65401/Physics/Create?articleid=smth
现在,当您单击该链接时,您的create方法将被调用,它将返回您指定的View。 (此时如果您在方法中查看articleId,那么它将具有该值)。
现在,您在评论中评价并提交表格。那时你将无法找到articleId。这是因为articleId不保留在任何地方。
如果以上是您的问题,那么以下内容将解决您的问题。
<强>解。强>
在Controller中创建两个方法
获取单击“新建”时将调用的方法。提交表单时会调用另一个。
控制器
[HttpGet]
public async Task<IActionResult> Create(string articleId)
{
Physics t = new Physics();
if(!string.IsNullOrEmpty(articleId))
{
t.ArticleID = articleId;
}
return View(t);
}
[HttpPost]
public async Task<IActionResult> Create([Bind("ID,CommentContext,UserName,ArticleID")]Physics physics)
{
if (ModelState.IsValid)
{
physics.UserName = HttpContext.User.Identity.Name;
//_context.Add(physics);
//await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
return View(physics);
}
在您看来,我做了一些小改动,所以articleId会保留。 (参见我为articleId创建了隐藏字段)
<h2>Create</h2> <form asp-action="Create"> <div class="form-horizontal"> <input asp-for="ArticleID" type="hidden" /> <h4>Physics</h4> <hr /> <div asp-validation-summary="ModelOnly" class="text-danger"></div> <div class="form-group"> <label asp-for="CommentContext" class="col-md-2 control-label"></label> <div class="col-md-10"> <input asp-for="CommentContext" class="form-control" /> <span asp-validation-for="CommentContext" class="text-danger" /> </div> </div> <div class="form-group"> <div class="col-md-offset-2 col-md-10"> <input type="submit" value="Create" class="btn btn-default" /> </div> </div> </div> </form>
我希望这个解决方案可以帮到你。