页面上的许多按钮,需要发送每个的唯一发布数据

时间:2012-03-29 21:37:57

标签: asp.net-mvc-3

我列出了一堆车,旁边有一个按钮,点击后需要执行GET,但也会发送该项目的模型。名称:

@using (Html.BeginForm("GetCarUrl", "Car", FormMethod.Get, new { model = Model }))
{
    if(Model.Cars != null && Model.Cars.Count > 0)
    {       
        foreach (CarContent car in Model.Cars)
        {
            <p>@car.Name</p>
        }

            <input type="button" value="Get Car Url" class="submit" />
    }

因此页面呈现了一堆超链接和按钮:

[hyperlink1] [submit]
[hyperlink2] [submit]
[hyperlink3] [submit]
[hyperlink4] [submit]
[hyperlink5] [submit]
...

当用户点击任何提交时,我需要为该特定超链接传回相应的@ car.CarType

不知道如何解决这个问题。我的操作方法需要将特定汽车超链接的@ car.CarType发送给它

更新

这是我的标记:

    Html.Hidden("userId", Model.UserId);
    Html.Hidden("lessonId", Model.LessonId);

@if(....)
{
    foreach (Car car in Model.Cars)
    {
        using (Html.BeginForm("GetFileDownloadUrl", "Car", FormMethod.Get, new {  carFileUrl= car.CarFileUrl}))
        {
                <p><a href="/Car/@Model.CarId/@Model.UserId/Url">@fileContent.Name</a>
                    <input  type="submit" value="download" name="downloadFile"/>
                </p>
        }
    }
}

这是要点击的动作方法,想要发送userId,CarId和carFileUrl:

[HttpGet]
public string GetFileDownloadUrl(string carFileUrl, int carId, int userId)
{
    string downloadUrl = string.Empty;
    downloadUrl =GetDownloadUrl(carId, carFileUrl, userId);

    return downloadUrl;
}

这是我的路线:

context.MapRoute("CarFileDownload", "Car/{carId}/{userId}/{carFileUrl}", new { controller = "Content", action = "GetFileDownloadUrl", carFileUrl= UrlParameter.Optional, carId = UrlParameter.Optional, userId = UrlParameter.Optional });

当我点击某个按钮时,它不会回复到我的GetDownloadUrl动作方法。

我不知道如果我需要所有这些可选参数设置,我是否只是没有正确的路由设置然后在我的BeginForm中我是否需要再次指定所有这些,因为我有一些他们作为隐藏的字段被回复?在这种情况下,不确定为什么它没有达到我的GetFileDownloadUrl操作方法...

2 个答案:

答案 0 :(得分:0)

为汽车类型设置一个隐藏字段,并使用JQuery或类似方法使超链接的click事件设置为汽车类型隐藏字段。

使用“渐进增强”的概念,您可以使页面仍然可以为那些可能没有启用javascript的用户提供功能 - 只需让链接实际执行get并使按钮隐藏即可。然后,使用JQuery覆盖链接的默认行为(如上所述)并使按钮可见。通过这种方式,您将获得所需的行为,但您的页面仍可用于没有javascript的用户。

答案 1 :(得分:0)

没有什么可以阻止您在一个页面中创建多个表单。

if(Model.Cars != null && Model.Cars.Count > 0)
{       
    foreach (CarContent car in Model.Cars)
    {
        <div>
        @using (Html.BeginForm("GetCarUrl", "Car", FormMethod.Get, new { model = car }))
        {
            <p>@car.Name</p>
             @Html.Hidden("CarId", car.Id)
             <input type="submit" value="Get Car Url" class="submit" />
        }
        </div>
    } 
}

请注意每种表单model = car