gpt4 book ai didi

asp.net-mvc - ASP.NET MVC 部分 View 和表单操作名称

转载 作者:行者123 更新时间:2023-12-02 02:18:39 25 4
gpt4 key购买 nike

如何创建具有指定 id 的表单的部分 View ?我到目前为止:

using (Html.BeginForm(?action?,"Candidate",FormMethod.Post,new {id="blah"}))

部分 View 用于创建和编辑,因此第一个参数 ?action? 将不同。我无法弄清楚 ?action? 的值应该是多少。

<小时/>

更新:

我想我的问题还不够清楚。我最终做的是拆分 Request.RawUrl 以获取 Controller 名称和操作名称:

 string[] actionUrlParts = ViewContext.HttpContext.Request.RawUrl.Split('/');
using (Html.BeginForm(actionUrlParts.Length >= 2? actionUrlParts[2] : "",
actionUrlParts.Length >= 1 ? actionUrlParts[1] : "", FormMethod.Post, new { id = "blah" }))

有点丑陋,但它有效。有没有更好的方法来获取部分 View 中的操作名称?

最佳答案

通过ViewData传入要执行的操作。

在呈现 View 的操作中,为回发操作创建一个 ViewData 项。在您的表单中引用此 ViewData 项来填写操作参数。或者,您可以创建一个仅查看模型,其中包含操作和实际模型作为属性,并从那里引用它。

使用 ViewData 的示例:

using (Html.BeginForm( (string)ViewData["PostBackAction"], "Candidate", ... 

渲染操作:

public ActionResult Create()
{
ViewData["PostBackAction"] = "New";
...
}


public ActionResult Edit( int id )
{
ViewData["PostBackAction'] = "Update";
...
}

使用模型的示例

public class UpdateModel
{
public string Action {get; set;}
public Candidate CandidateModel { get; set; }
}

using (Html.BeginForm( Model.Action, "Candidate", ...

渲染操作:

public ActionResult Create()
{
var model = new UpdateModel { Action = "New" };

...

return View(model);
}


public ActionResult Edit( int id )
{
var model = new UpdateModel { Action = "Update" };

model.CandidateModel = ...find corresponding model from id...

return View(model);
}

编辑:根据您的评论,如果您认为这应该在 View 中完成(尽管我不同意),您可以尝试一些基于 ViewContext.RouteData 的逻辑

<%
var action = "Create";
if (this.ViewContext.RouteData.Values["action"] == "Edit")
{
action = "Update";
}
using (Html.BeginForm( action, "Candidate", ...
{
%>

关于asp.net-mvc - ASP.NET MVC 部分 View 和表单操作名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/731575/

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