gpt4 book ai didi

asp.net-mvc - 如何在MVC View 中传递模型

转载 作者:行者123 更新时间:2023-12-04 00:58:42 25 4
gpt4 key购买 nike

我想将模型从表单传递给 Controller ​​并在同一 View 中显示其他模型。我该怎么做?我的主要问题是:如何发送到 testAcc actionresult,模型​​ CommentModel,并在 ViewData["Success"] 中显示文本?

这是我的代码:

    @model XYZ.Models._ideaDetailsWrapper
@using XYZ.Tools
<article>
<h2>@Model.idea.Tilte</h2>

<table><tr><td>
<p>
Author: <b>@UserTools.getUser(Model.idea.AuthorID).UserName</b><br />
Add date: @Model.idea.AddDate<br />
Category: @IdeasTools.getCategoryName(Model.idea.CategoryID)<br />
</p></td>
</tr></table>

<p><b>Content:</b><br />
@Model.idea.Content</p>

<br /><br />

// HERE - ADD comment

@using (Html.BeginForm("testAcc", "Ideas", FormMethod.Post))
{
<h4>Add comment:</h4>

@Html.LabelFor(m => m.addComment.Content)
@Html.EditorFor(m => m.addComment.Content)<br />
<input type="submit" value="SendEmails" />
}

@ViewData["Success"]

包装器:
public class _ideaDetailsWrapper 
{
public Ideas idea { get; set; }
public IEnumerable<IdeasComment> commentList { get; set; }
public CommentModel addComment { get; set; }
}

Action 方法:
    [HttpPost]
[Authorize]
public ActionResult testAcc(CommentModel model)
{

CommentModel abs = model;

ViewData["Success"] = "Working!";

// ADD TO DATABASE, but model is null..
return RedirectToAction("Details", "Ideas");
}

最佳答案

一种方法是使用 局部 View .

详情.cshtml

@model XYZ.Models._ideaDetailsWrapper
...
// HERE - ADD Comment
<div id="comment-form">
@Html.Partial("_CommentForm", Model.addComment)
</div>

@Model.message
// add validation javascript to this view

_CommentForm.cshtml (部分 View )
@model XYX.Models.CommentModel
@{
Layout = null;
}

@using (Html.BeginForm("testAcc", "Ideas", FormMethod.Post))
{
@Html.ValidationSummary(true)
<h4>Add comment:</h4>

@Html.LabelFor(m => m.Content)
@Html.EditorFor(m => m.Content)
@Html.ValidationMessageFor(m => m.Content)<br />
<input type="submit" value="SendEmails" />
}

局部 View 是强类型的,将提交 CommentModel
Action 方法:
[HttpPost]
[Authorize]
public ActionResult testAcc(CommentModel model)
{
string abs = model.Content;

TempData["Message"] = "Working!";

// ADD TO DATABASE
return RedirectToAction("Details", "Ideas", new { id = model.Idea.Id });
}

[HttpGet]
[Autorize]
public ActionResult Details(int id)
{
var ideaModel = dbStore.GetIdea(id); // however you do this

var model = new _ideaDetailsWrapper {
idea = ideaModel,
addComment = new CommentModel(),
message = TempData["Message"]
...
};
return View(model);
}

使用 TempData通过重定向传递消息。你会检查是否 TempData["Message"]存在于 Details在使用页面之前直接加载页面时的操作。

编辑:对于验证,只需将验证 javascript 添加到详细信息 View 和 ValidationSummary到局部 View 。

编辑 2:此方法分解为验证和错误处理。为此,它需要 AJAX 来替换表单 div 而不重新加载整个页面。

需要拦截正常的表单提交,使用AJAX自己处理
$("form").on("submit", function(event) {
event.preventDefault();
$.ajax({
url: "/Ideas/testAcc",
type: "POST",
data: $("form").serialize()
})
.done(function(partialViewHtml) {
$("#comment-form").html(partialViewHtml);
});
});

你的行动变成
[HttpPost]
public ActioNResult testAcc(CommentModel model)
{
if (ModelState.IsValid)
{
...
return RedirectToAction("Details", "Ideas", new { id = model.Idea.Id });
}
return PartialView("_CommentForm", model);
}

关于asp.net-mvc - 如何在MVC View 中传递模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16126049/

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