1
ASP.netは私には新しく、既存のプロジェクトを手渡してきました。私はSO:Asp.Net WebForms - How to pass ViewData as param to User Controlを書きましたが、回答がなかったので明確ではありませんでした。asp.net c#ユーザーコントロールパラメータを生成
は、私がこれやりたい:
Consignment.ascx:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Daff.Lae.TraceCommon.ValueObjects.NoiReproNLS.NoiNlsVO>" %>
<%@ Register TagPrefix="uc" TagName="speciesgrid" Src="~/Views/Noi/ReproNLS/SpeciesGridController.ascx" %>
<%
var applicationId = ViewData["NoiId"];
var applicationSpecies = ViewData["applicationSpecies"] as HashSet<string>; // Same as the JS var applicationSpecies but from server - needed to build page
%>
...
<%
foreach (String species in applicationSpecies)
{
%>
<div id="<%=species%>_grid" style="display: none;">
<uc:speciesgrid runat="server" species=<%=species%>/>
</div>
<%}
%>
をしかし、それはと<uc:speciesgrid
に<%=species%>
に失敗:
{"Server tags cannot contain <% ... %> constructs."}
ユーザーコントロール:
SpeciesGridController.ascx
<%@ Control Language="C#" ClassName="SpeciesGrid" %>
<%@ Import Namespace="Kendo.Mvc.UI" %>
<%@ Import Namespace="Daff.Lae.TraceCommon.ValueObjects.NoiReproNLS" %>
<%@ Import Namespace="System.Diagnostics" %>
<script runat="server">
private IDictionary<string, object> readRouteValueDictionary = new Dictionary<string, object>();
private int _applicationId;
private string _species;
public string species
{
set
{
if (!value.IsEmpty())
{
_species = value;
readRouteValueDictionary.Add("species", value);
}
}
get
{
return _species;
}
...
}
</script>
<fieldset>
<legend><%=species%></legend>
<div>
<% Html.Kendo().Grid<NoiNlsConsignmentVO>()
.Name("grdNlsConsignment"+species)
...
%>
</div>
</fieldset>
1は<uc:speciesgrid runat="server" species=<%=species%>/>
を取得しない方法働く?
あなたがASCXを定義するためにMVCまたはWebフォームの方法を使用していますか?第1のポイント: 'runat =" server "'属性ブロックの値を設定する '<% ... %>'コードブロックで制御することはできません。剣道とASP.NET MVCを使用している場合は、ユーザコントロールレジスタの代わりに 'Html.Partial'または' Html.RenderPartial'を使用することを検討してください。 –
Webフォーム。 'Partials'を使って試してみましょう。ありがとう! – HankCa