Razor @ Html.ActionLink没有正确传递控件值

时间:2018-06-18 19:00:48

标签: asp.net razor html.actionlink

我是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调用控制器,如下所示。控制器确实得到了#34; selectedEmail&#34;参数,但页面永远不会重定向。我什么也没做。我尝试了两个带链接参数的动作链接(如下所示)。

@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;
}

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您的第一种方法实际上并没有进行重定向。 (它也调用了一种不同的方法,我假设复制粘​​贴错误)

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

我刚刚更改了代码以使用不引人注目的javascript。将[{1}}替换为describe('authorize actions', () => { beforeEach(() => { store = mockStore({}); }); it('should create an action to signify successful auth', () => { auth.authorize.mockImplementation(() => Promise.resolve({"something": "value"})); const expectedActions = [{"type":"AUTHORIZE_RESPONSE","payload":{"something":"sdklfjsdf"}}]; authorizeUser(store.dispatch, store.state).then(() => { expect(store.getActions()).toEqual(expectedActions); }); }) }); 链接

onclick

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

id

答案 1 :(得分:0)

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

<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;
}

完全按照我需要的方式调用了控制器。