Webmatrix - 从查询字符串更新输入值

时间:2013-12-02 13:22:22

标签: forms razor webmatrix

我有一个超级快速的问题,我想你可以快速回答。 我在我正在构建的网站上有一个搜索页面,它使用查询字符串参数来更改搜索结果。

我还希望任何查询字符串参数能够反映嵌入在同一页面上的搜索表单。它适用于输入框。例如:

编辑代码:

var proptype = db.Query("SELECT * FROM Property_Type");

string propertyType = "";

propertyType = Request.QueryString["propertyType"];
    <select name="propertytype">
      <option value="">Any</option>
      @foreach(var type in proptype){    
      <option value="@type.PropertyTypeID" selected="@(propertyType == type.PropertyTypeID)">@type.PropertyType</option>
      }
    </select>

谢谢,加文

1 个答案:

答案 0 :(得分:3)

要在<option>内标记所选<select>的值,请使用selected属性。在最简单的层面上,您可以这样做:

<select name="propertytype">
 <option value="">Any</option>
 <option value="villa" selected="@(propertyType == "villa")">Villa</option>
 <option value="apartment" selected="@(propertyType == "apartment")">Apartment</option>
</select>

这将评估每个测试的真或假(只有一个应该是真的),并且Razor引擎会在适当的元素上写出selected="selected"

您应该考虑您的属性类型是否应该存储在数据库中。您可能应该有一个属性类型表,每个属性都使用外键链接到适当的一个(或多个)。这会改变你写下你的下拉列表的整个方式,并实际上有所简化。那么你的代码就像(显然有些取决于你的数据库模式和字段名称等):

<select name="propertytype">
 <option value="">Any</option>
 @foreach(var type in propertyTypesQuery)
 {
     <option value="@type.Id" selected="@(propertyType == type.Id)">@type.Name</option>
 }
</select>

从form元素中获取值的位可以简单如下:

int propertyType = Request.Form["propertytype"].AsInt();

如果没有选择任何内容,则会将其设置为零,您可以将其用于搜索系统中的“任何”逻辑。

您还可以使用Html.DropDownList()帮助程序来获得更清晰的版本。有关示例代码,请参阅Mike Brind的文章:http://www.mikesdotnetting.com/Article/196/WebMatrix-jQuery-Cascading-Dropdown-Lists

您在代码上使用了错误的变量名,您似乎已重用numBedrooms,但我怀疑它是复制/粘贴错误。需要说明的是:numBedrooms = Request.QueryString["propertyType"];应为propertyType = Request.QueryString["propertyType"];