2016-04-28 90 views
1

我有一个说有10个属性的模型。 A,B,C等......如何覆盖ASP.Net核心中的一个模型属性

属性A是一个数组。

对于阵列中的每个值生成我一个标签是这样的:

<div class="col-sm-10 row"> 
    @foreach (var item in Model.A) 
    { 
     <div class="col-sm-1 right-buffer"> 
      <a href="@item.Value"><i class="" aria-hidden="true">@item.Text</i></a> 
     </div> 
    } 
</div> 

当用户点击某个环节,我应该把它重定向到同一个页面,但也有一些模型属性改变。例如:

当前URL:my/controller/someaction?name=Alex&age=20&from=fr&CurrentA= 与模型?name=Alex&age=20&from=fr&CurrentA=

如果用户点击<a>文本foo应该在my/controller/someaction?name=Alex&age=20&from=fr&CurrentA=foo

则是<a>点击文本bar,它现在应该是被重定向重定向my/controller/someaction?name=Alex&age=20&from=fr&CurrentA=bar

因此应该保留整个查询字符串(除了一个参数)以发送curre nt模型状态到服务器,而我想设置一个值并将其重定向到同一页面,但具有新值。

最终,它应该像postback with one extra value setted to model

行为是否有可能或者我应该使用JS和执行都要亲力亲为?

+1

请问这是[ASP.NET Core MVC](https://github.com/aspnet/Mvc)? – CodingGorilla

+0

@CodingGorilla好的,看标签 –

+0

你的标签很混乱,这就是为什么我问。 [asp.net],[asp.net-mvc]仍然相互关联,但[asp.net-core]与前两者完全无关。 – CodingGorilla

回答

1

手动我解决这样的:

首先,在模型创建每个属性隐藏字段:

<form asp-controller="search" asp-action="index" method="get" role="form" id="searchForm" asp-antiforgery="false"> 
    <input asp-for="SessionId" type="hidden" name="sessionId" value="@Model.SessionId" /> 
    <input asp-for="Quantity" type="hidden" name="quantity" value="@Model.Quantity"/> 
    <input asp-for="SortField" type="hidden" name="sortField" value="@Model.SortField"/> 
    <input asp-for="IsAscending" type="hidden" name="IsAscending" value="@Model.IsAscending" /> 
    <input asp-for="Offset" type="hidden" name="offset" value="0" /> 

    ... 
</form> 

然后,使用JS的隐藏字段替换值,然后提交表单。从输入值将在查询字符串autimatically转换器,因此一切正常:

function sortDocuments(sortField) { 
    var sField = document.getElementById('SortField'); 
    var isDescending = document.getElementById('IsAscending'); 
    if (sField.value === sortField) { 
     if (isDescending.value.toUpperCase() === 'FALSE') { 
      isDescending.value = 'TRUE'; 
     } else { 
      sField.value = 'rank'; 
      isDescending.value = 'FALSE'; 
     } 
    } else { 
     sField.value = sortField; 
     isDescending.value = 'FALSE'; 
    } 
    document.getElementById('searchForm').submit(); 
} 

不是很优雅,但它的工作。