我是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;
}
有什么想法吗?
答案 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;
}
完全按照我需要的方式调用了控制器。