0

嗨,我正在一个 mvc 项目中工作,我被困在非常小的下拉选择问题上。

有2个下拉菜单。第一个用于国家名称,第二个用于旅游类型。

一个按钮用于根据下拉选择进行搜索。

这是网站的链接:

www.ourplanettravel.com.au/

如果我们从第一个下拉列表中选择“Tasmania”,从第二个下拉列表中选择“Tours & Cruises”,然后单击搜索按钮,那么只有在这种情况下,第二个下拉列表才会失去它的价值(它显示 --Choose Tourism Type-- ),而在其他选项中它完美运行。

这是我正在使用的代码:

     <select id='TourismType' name="TourismType"> 
       <option value=''>--Choose Tourism Type--</option>   
       {{if $item.data.oTourismType}} 
         {{each  $item.data.oTourismType}}

    <option value='${Text}'>${Text}</option>
     {{/each}} 

   </select> 
     {{/if}} 

请建议我哪里错了。

4

1 回答 1

0

看起来下拉列表在视图的当前实例中保留了其值(因此“Tours & Cruises”是您搜索后查询字符串的一部分并包含在您的搜索结果中),但不会在下拉列表中保留其值本身。基本上,传递给将在您转到下一页时显示的视图的模型没有绑定所选的旅游类型。您可以在控制器中重新绑定该属性。

但是,一般来说,我建议使用 Razor 助手来进行模型绑定,而不是显式标记,这可能会首先避免这个问题。

带有单个下拉菜单的通用示例...

模型

public class YourModel {
    public int SelectedTourismType { get; set; }
    public IEnumerable<TourismType> TourismTypes { get; set; }
}

旅游类:

public class TourismType {
    public int TourismTypeID { get; set; }
    public string DisplayName { get; set; }
    // other properties if applicable
}

看法:

@model YourModel

// Your form or whatever here...

@Html.DropDownListFor(m => m.SelectedTourismType,
    new SelectList(Model.TourismTypes, "TourismTypeID", "DisplayNameName"),
    "Select an option") // Default text before the user has selected an option

控制器:

public ActionResult YourAction()
{
    YourModel model = new YourModel();
    model.TourismTypes= new List<TourismType> {
        new TourismType { TourismTypeID = 1, Value = "Tours & Cruises" },
        new TourismType { TourismTypeID = 2, Value = "Some other type name" }
    }

    return View("YourViewName", model);
}

只要您在下一页上刷新视图时通过相同的模型,这应该可以工作。当然,您需要对其进行修改以包括两个下拉菜单,一个依赖于另一个。

于 2013-10-11T17:42:32.990 回答