2012-11-01 29 views
2

我有一個用模型調用的MVC3局部視圖。在控制器中從MVC3局部視圖訪問模型數據,但不在視圖中明確傳遞它

@model SomeModel 

該模型有一個Id參數。

在我打電話@Html.Action("SomeMethod", "SomeController")

認爲有什麼辦法來訪問的someMethod的ActionResult Id參數沒有明確地傳遞這樣的:

@Html.Action("SomeMethod", "SomeController", new {"Id" = Model.Id}) 

的問題是,我不能改變的部分視圖的源代碼。我需要Id值。 Id在部分視圖中未使用,因此我無法通過JavaScript訪問它。 模型是否傳遞給HttpContext並且有任何方法可以傳遞它?

編輯:事情是,我正在開發一個nopCommerce插件,就像nop-templates提供的插件一樣。 nopCommerce是一款開源軟件,我可以更改代碼,但該插件將分開發貨,因此不建議在nopCommerce視圖中進行更改,我所指的視圖就是這樣。

回答

2

如果無法更改分部視圖的源代碼,則無法獲取控制器中的id值。它與MVC模式的一個主要點完全分離。 你必須明確地將它作爲參數傳遞給你的動作。 骯髒的解決方法可能是將該ID存儲在Session的某處。

1

在項目中,我填補我州通過國家ID下拉列表中這樣

在我看來

我通過國家ID到我的控制器的ActionResult這樣

<script type="text/javascript"> 
    function cascadingdropdown() {   
     var countryID = $('#countryID').val(); 
     $.ajax({ 
      url: "@Url.Content("~/City/State")", 
      dataType: 'json', 
      data: { countryId: countryID }, 
      success: function (data) { 
       alert(data); 
       $("#stateID").empty(); 
       $("#stateID").append("<option value='0'>--Select State--</option>"); 
       $.each(data, function (index, optiondata) { 
        alert(optiondata.StateName); 
        $("#stateID").append("<option value='" + optiondata.ID + "'>" + optiondata.StateName + "</option>"); 
       }); 
      }, 
      error: function() { 
       alert('Faild To Retrieve states.'); 
      } 

     }); 
    } 
</script> 
在我的控制器

我有行動

public JsonResult State(int countryId) 
{     
var stateList = CityRepository.GetList(countryId); 
return Json(stateList, JsonRequestBehavior.AllowGet); 
} 

我認爲這會幫助你....

+0

正如我在我的帖子中傷心的那樣,ID在局部視圖中並沒有被使用,我無法更改源代碼,所以你的方法不會幫助我。如果情況並非如此,這種方法非常有用。 Id也可以作爲html元素的屬性添加,並且不顯眼地訪問。 –

相關問題