asp-action渲染action =“”而不是正确的URL

时间:2018-02-02 11:32:31

标签: c# asp.net-core asp.net-core-mvc

我的控制器中有一个名为“NewJobApp”的方法可以正常工作并使用“NewJobApp”模型返回视图。

[AllowAnonymous]
[HttpGet("Consultant/NewJobApp/{agencyID:int}/{userID:int}/{companyID:int}/{jobID:int}")]
public async Task<ViewResult> NewJobApp(int agencyID, int userID, int companyID, int jobID)
{
    NewJobApp nja = await Repository.GetNewJobApp(agencyID, userID, companyID, jobID);
    return View(nja);
}

在视图中我有一个应该调用“SubmitNewJobApp”的表单,但是当我查看页面源时,它显示了action =“”

<form id="JobAppForm" class="form-group" asp-controller="Consultant" asp-action="SubmitNewJobApp" method="post" style="text-align: left">

@Html.AntiForgeryToken()
<input id="AgencyID" asp-for="@Model.AgencyID" value="@Model.AgencyID" type="hidden" />
<input asp-for="@Model.AgencyName" value="@Model.AgencyName" type="hidden" />
<input asp-for="@Model.UserID" value="@Model.UserID" type="hidden" />
<input asp-for="@Model.CompanyID" value="@Model.CompanyID" type="hidden" />
<input asp-for="@Model.JobID" value="@Model.JobID" type="hidden" />
@if (!String.IsNullOrEmpty(Model.Errs))
{            
    @Html.Raw(Model.Errs);
}
<p style="margin: 0px; font-size: 8px">&nbsp;</p>

<div class="form-group">
    <label style="width: 120px; text-align: left; display: inline-block;" asp-for="@Model.JobTitle">Job:</label>
    <input type="text" asp-for="@Model.JobTitle" value="@Model.JobTitle" readonly />
</div>
<div class="form-group">
    <label style="width: 120px; text-align: left; display: inline-block;" asp-for="@Model.CompanyName">Company:</label>
    <input type="text" asp-for="@Model.CompanyName" value="@Model.CompanyName" readonly />
</div>

<p style="margin-bottom: 4px;">Enter person search expression:</p>
<input asp-for="@Model.SearchExpression" value="@Model.SearchExpression" style="width: 132px; margin-bottom: 8px;" />
<button id="myButton" class="btn btn-primary" type="submit">Get Candidates</button>

<p style="margin: 0px; font-size: 8px">&nbsp;</p>
<div class="form-group">
    <label style="width: 120px; display: inline-block;" asp-for="ContactID">Contact:</label>
    @Html.DropDownListFor(m => m.ContactID, Model.Contacts, "Choose a Contact", new { @class = "myDDL", @id = "contactsDDL" })
</div>

<div class="text-center" style="text-align: right">
    <button id="btnSave" class="btn btn-primary" type="submit">Save</button>
</div>
</form>

这是控制器中的“SubmitNewJobApp”方法,但它永远不会被调用。

[HttpPost()]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> SubmitNewJobApp(NewJobApp nj)
{
    int id = 0;
    bool is_err = false;
    string err = string.Empty;

    // check data
    if (nj.ContactID == 0)
    {
        is_err = true;
    }

    // check model state
    if (!ModelState.IsValid || is_err)
    {
        nj = await Repository.GetNewJobApp(nj);
        return View("NewJobApp", nj);
    }

    nj.NewRecordID = id;
    return View("NewJobApp", nj);
}

1 个答案:

答案 0 :(得分:0)

我仍然不明白为什么这不起作用,但我有一个临时解决方案。

如果我在返回“NewJobApp”视图的方法上删除HttpGet模板,表单操作现在包含一个值,并且有效!

以前的方法:

parameter

现在改为:

function

这是调用“NewJobApp”控制器方法的更改代码:

[AllowAnonymous]
[HttpGet("Consultant/NewJobApp/{agencyID:int}/{userID:int}/{companyID:int}/{jobID:int}")]
public async Task<ViewResult> NewJobApp(int agencyID, int userID, int companyID, int jobID)
{
    NewJobApp nja = await Repository.GetNewJobApp(agencyID, userID, companyID, jobID);
    return View(nja);
}

但实际上我更喜欢使用模板,因为我希望看起来更干净的URL。

我的启动路线:

    [HttpGet()]
    [AllowAnonymous]        
    public async Task<ViewResult> NewJobApp(int agencyID, int userID, int companyID, int jobID)
    {
        NewJobApp nja = await Repository.GetNewJobApp(agencyID, userID, companyID, jobID);
        return View(nja);
    }