Razor @Html.操作链接未正确传递控件值



我是Razor的新手。 我在这个项目上取得了良好的进展,但遇到了一个主要障碍,一些似乎很容易的事情。我读过很多关于如何将控件的值作为参数传递给控制器以重定向到新视图的文章。 问题是我要么将值传递给控制器但无法重定向,要么重定向并且未传递参数。

这是我的最新尝试。 我希望将GetSelectedEmail的返回传递给控制器("selectedEmail"的值(。 我可以看到 Javascript 正在获取正确的值并且正在调用控制器,但该值始终为 NULL。

@Html.ActionLink("Get Scoring Report...", "History", "Student", null, new { onclick = "return GetSelectedEmail();" });
<select id="selectedEmail" name="align">
@foreach( var s in Model.Students )
{
<option id=@s.Email>@s.Email</option>
}
</select>
function GetSelectedEmail() {
var str = "new {email=" + $("#selectedEmail").val() + "}";
return str;
}

控制器...

public ActionResult History(string email, string sort)
{
string localEmail="";
if ( email == null || email == "" )
localEmail = AccountProfile.CurrentUser.UserName;

我也尝试像下面这样用 Ajax 调用控制器。 控制器确实会获取"selectedEmail"参数,但页面永远不会重定向。 我什么都不做。 我尝试是否具有带有链接参数的操作链接(如下所示(。

@Html.ActionLink("Get Scoring Report...", "", "", null, new { onclick = "return GetSelectedEmail();" });
<select id="selectedEmail" name="align">
@foreach( var s in Model.Students )
{
<option id=@s.Email>@s.Email</option>
}
</select>

function GetSelectedEmail() {
$.ajax({
url: '/Student/History',
data: { email: $("#selectedEmail").val(), sort: "CaseID" },
type: 'POST',
dataType: 'json',
});
return true;
}

有什么想法吗?

您的第一种方法实际上并不是执行重定向。(它也调用了一个不同的方法,我假设这是一个复制粘贴错误(

您当前的代码没有传递值,因为它是一个链接,当单击它时,它应该导航到该 URL,这正是它正在做的事情。

我只是将代码更改为使用不显眼的javascript。已将onclick替换为链接的id

@Html.ActionLink("Get Scoring Report", "History", "Student", null, new { id="score" });

当在此链接上单击时,读取 Select 元素的值,并通过设置 Location.href 属性值导航到第二个操作方法

$(function () {
$("#score").click(function(e) {
e.preventDefault();  // Stop the normal redirection
var url = $(this).attr("href"); //Get the url to action method
url += "?email=" + $("#selectedEmail").val(); //append querystrings
window.location.href = url;  // redirect to that url
});
});

对于我需要的解决方案很简单。

<a href="#" onclick="GetScoreHistory()">Show Student Scores</a>
<select id="selectedEmail" name="align">
@foreach( var s in Model.Students )
{
<option id="@s.Email">@s.LastName,@s.FirstName</option>
}
</select>

还有Javascript的魔力...

function GetScoreHistory() {
var emailVal = $('#selectedEmail').find('option:selected').attr('id');
var url = '@Url.Action("History", "Student")';
url += "?email=" + escape(emailVal);
window.location.href = url;
}

控制器的调用方式与我需要的调用方式完全相同。

最新更新