为什么点击@ Url.Action会出错?

时间:2017-11-07 11:53:08

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

当我点击按钮输入时触发控件ImagePopup内的动作Stories但是它会抛出错误。

代码:

@{
    var listData = (List<HimHer.Models.Stories>)ViewBag.Grid;

    foreach (var imageName in listData)
    {
        <div class="col-md-4">
            @Html.HiddenFor(model => model.Story)          
            <input
                class="img-responsive img-thumbnail"
                type="image"
                onclick="location.href='@Url.Action("ImagePopup", "Stories", new {story= imageName.Story})'"
                src="@("/UploadedFiles/"+ imageName.Image)"
                alt="Submit"
                width="100%"
                height="100%"/>
        </div>
    }
}

单击输入后会抛出错误:

  

无法找到资源。请求的URL:/ Stories / ImagePopup

即使它存在。它就在Stories文件夹中。这是没有模型的局部视图。

[HttpPost]
public ActionResult ImagePopup(string story)
{            
    ViewBag.PopupStyle = "";
    ViewBag.PopupStory = story;
    return View("GetImagesStories");
}

我做错了什么?

3 个答案:

答案 0 :(得分:1)

我正在寻找一个HTTPGet动作。 如果你想打电话给你的帖子,你需要使用HTML.BeginForm但如果页面上有太多的话,它会变得毛茸茸。

答案 1 :(得分:0)

尝试使用[HttpGet]操作方法的<{1}}属性

答案 2 :(得分:0)

设置当前页面的href位置:

location.href=

使浏览器执行Get Request类型,并且不会将任何表单数据发布回控制器。因为控制器上的方法专门用于发布请求(因为[HttpPost]属性),所以没有其他匹配的方法可以工作,因此你会得到一个异常。

解决方案:

您可以继续使用Get方法。将[HttpPost]替换为[HttpGet]会让你到达中途。另一个要求是确保Url.Action代码包含要回发的所有必要信息(例如@Html.HiddenFor(model => model.Story)中的所有数据都不包括在内,我不知道您是否需要是不是。)

或者

您可以修改代码以使用Post方法。将您的<input type="image"更改为<button type="submit">,并在每个按钮和隐藏的输入元素周围添加表单。