为什么我的 HttpPost 方法没有从我的 Asp.Net Core Razor 页面触发?
Why is my HttpPost method not firing from my Asp.Net Core Razor page?
这里是 Asp.Net Core Razor 的新手。
我正在尝试连接一个简单的按钮以保存在我的 Razor 页面上。
我的 [HttpPost]SaveDocument() 方法没有在单击“保存”按钮时触发。
相反,Index() 方法正在触发。
我不确定我连接错了什么。
这是我的 Razor 页面定义的一个片段:
@model SampleViewModel
@{ Layout = "_DevExtremeLayout";
ViewBag.Title = "Sampe Title";}
<form method="post">
<div id="InputFormPanel" class="InputFormPanel">
<partial name="@Model.ChildViewName" model="@Model.ChildViewModel" />
</div>
<div class="row">
<div class="col-md-3">
<input id="ApprovedBy" class="form-control" asp-for="ApprovedBy" />
</div>
<div class="col-md-2">
<input class="form-control" asp-for="Title" />
</div>
</div>
<button id="SaveButton" type="submit" >Save Form</button>
</form>
这是我的模型:
public class SampleViewModel
{
public object ChildViewModel { get; set; }
public string ChildViewName { get; set; }
public string ApprovedBy { get; set; }
public string Title { get; set; }
}
这是我的控制器的一个片段:
public class SampleController : Controller
{
public async Task<IActionResult> Index(Guid documentTypeId)
{
SampleViewModel viewModel = new SampleViewModel()
{
};
return View(viewModel);
}
[HttpPost]
public async Task<IActionResult> SaveDocument(SampleViewModel sampleViewModel)
{
return RedirectToAction("Index");
}
}
作为新手,我想我正在做一些愚蠢的事情 here/missing。
我在这里做错了什么?
如果您没有在 HTML 表单上分配 action 属性,它将 post 向您当前所在的同一 page/route 请求,在本例中是您的 Index 操作。
所以如果你像这样添加一个动作属性:
<form method="post" action="SaveDocument">
它应该开始工作了。或者,您也可以将 SaveDocument 方法重命名为 Index,不会有任何错误,因为这两个方法签名不匹配。从代码组织的角度来看,这通常是我的偏好,因为它清楚地表明 GET/POST 操作是针对同一页面的。
这里是 Asp.Net Core Razor 的新手。
我正在尝试连接一个简单的按钮以保存在我的 Razor 页面上。 我的 [HttpPost]SaveDocument() 方法没有在单击“保存”按钮时触发。 相反,Index() 方法正在触发。 我不确定我连接错了什么。
这是我的 Razor 页面定义的一个片段:
@model SampleViewModel
@{ Layout = "_DevExtremeLayout";
ViewBag.Title = "Sampe Title";}
<form method="post">
<div id="InputFormPanel" class="InputFormPanel">
<partial name="@Model.ChildViewName" model="@Model.ChildViewModel" />
</div>
<div class="row">
<div class="col-md-3">
<input id="ApprovedBy" class="form-control" asp-for="ApprovedBy" />
</div>
<div class="col-md-2">
<input class="form-control" asp-for="Title" />
</div>
</div>
<button id="SaveButton" type="submit" >Save Form</button>
</form>
这是我的模型:
public class SampleViewModel
{
public object ChildViewModel { get; set; }
public string ChildViewName { get; set; }
public string ApprovedBy { get; set; }
public string Title { get; set; }
}
这是我的控制器的一个片段:
public class SampleController : Controller
{
public async Task<IActionResult> Index(Guid documentTypeId)
{
SampleViewModel viewModel = new SampleViewModel()
{
};
return View(viewModel);
}
[HttpPost]
public async Task<IActionResult> SaveDocument(SampleViewModel sampleViewModel)
{
return RedirectToAction("Index");
}
}
作为新手,我想我正在做一些愚蠢的事情 here/missing。 我在这里做错了什么?
如果您没有在 HTML 表单上分配 action 属性,它将 post 向您当前所在的同一 page/route 请求,在本例中是您的 Index 操作。
所以如果你像这样添加一个动作属性:
<form method="post" action="SaveDocument">
它应该开始工作了。或者,您也可以将 SaveDocument 方法重命名为 Index,不会有任何错误,因为这两个方法签名不匹配。从代码组织的角度来看,这通常是我的偏好,因为它清楚地表明 GET/POST 操作是针对同一页面的。