Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 控件名称前缀参数化的局部视图_Asp.net Mvc_Partial Views - Fatal编程技术网

Asp.net mvc 控件名称前缀参数化的局部视图

Asp.net mvc 控件名称前缀参数化的局部视图,asp.net-mvc,partial-views,Asp.net Mvc,Partial Views,我有一个BarEditor.ascx,可以从不同的地方调用 <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MyApp.Models.Bar>" %> <%= Html.TextBox("a") %> ... 我需要它是: bar.a=1&baz.a=2 所以我们可以用 public ActionResult Update(Bar bar, Bar baz) {

我有一个BarEditor.ascx,可以从不同的地方调用

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MyApp.Models.Bar>" %>
<%= Html.TextBox("a") %>
...
我需要它是:

bar.a=1&baz.a=2
所以我们可以用

public ActionResult Update(Bar bar, Bar baz)
{
    ...
}

编写可重用的BarEditor.ascx以生成控件名称前缀的最佳方法是什么?

调用用户控件时,我会将一个字符串(“baz”或“bar”等)与我的ViewData一起传递。让html.textbox从传递的文本中获取名称,从传递的值中获取值。

调用用户控件时,我会将一个字符串(“baz”或“bar”等)与我的ViewData一起传递。让html.textbox从传递的文本中获取名称,从传递的值中获取值。

您应该了解ASP.Net MVC中的模型映射。asp.net mvc页面中的所有内容都将呈现给html控件,因此不区分中的控件 和
您应该了解ASP.Net MVC中的模型映射。asp.net mvc页面中的所有内容都将呈现给html控件,因此不区分中的控件 和
为什么不为视图创建模型?然后,您的视图需要是使用数据类FormView的强类型视图

public class FormView
{
    string Bar {get; set;}
    string Baz {get; set;}
}
那么在你看来,你可以使用

<form action="update">
    <div>
        <% Html.RenderPartial("BarEditor", Model.Bar); %>
    </div>
    <div>
        <% Html.RenderPartial("BarEditor", Model.Baz); %>
    </div>

    <input type="submit" value="Submit" />
</form>

为什么不为视图创建一个模型呢?然后,您的视图需要是使用数据类FormView的强类型视图

public class FormView
{
    string Bar {get; set;}
    string Baz {get; set;}
}
那么在你看来,你可以使用

<form action="update">
    <div>
        <% Html.RenderPartial("BarEditor", Model.Bar); %>
    </div>
    <div>
        <% Html.RenderPartial("BarEditor", Model.Baz); %>
    </div>

    <input type="submit" value="Submit" />
</form>

只需为BarEditor创建一个ViewModel类,并将其强类型化为这个新类

e、 g

现在在BarEditor.ascx中创建文本框,如下所示

<%= Html.TextBox(Model.Prefix + ".a") %> 

在你看来,你包括这样的编辑

 <form action="update">
    <div>
        <% Html.RenderPartial("BarEditor", new ViewModel.BarEditor { Prefix = "Bar", Bar = ViewData["bar"]}); %>
    </div>
    <div>
        <% Html.RenderPartial("BarEditor", new ViewModel.BarEditor { Prefix = "Baz", Bar = ViewData["baz"]}); %>
    </div>
    <input type="submit" value="Submit" />
 </form>


hth

只需为您的BarEditor创建一个ViewModel类,并将其强类型化为这个新类

e、 g

现在在BarEditor.ascx中创建文本框,如下所示

<%= Html.TextBox(Model.Prefix + ".a") %> 

在你看来,你包括这样的编辑

 <form action="update">
    <div>
        <% Html.RenderPartial("BarEditor", new ViewModel.BarEditor { Prefix = "Bar", Bar = ViewData["bar"]}); %>
    </div>
    <div>
        <% Html.RenderPartial("BarEditor", new ViewModel.BarEditor { Prefix = "Baz", Bar = ViewData["baz"]}); %>
    </div>
    <input type="submit" value="Submit" />
 </form>


hth

让我说得更具体一些……该控件可以接受一个简单的类(textboxdata{}),它有两个属性:textboxName和textboxValue。在调用RenderPartial之前,实例化对象,然后将其传递给控件。您可以在控制器中创建“textboxData”对象的可枚举列表,以避免视图中的此类操作。更具体地说,该控件可以接受一个简单类(textboxData{}),该类有两个属性:textboxName和textboxValue。在调用RenderPartial之前,实例化对象,然后将其传递给控件。您可以在控制器中创建“textboxData”对象的可枚举列表,以避免在视图中执行此类操作。1。为什么在您的示例中FormView.Bar和FormView.Baz是字符串类型?2.你的建议行不通。我们将得到a=1&a=2。您可以将其更改为BarEditor而不是string。我在几乎所有的项目中都这样做,但我从来没有得到a=1&a=2。可能你在谈论一些类似的场景,比如:。但请注意,我指的是渲染部分。顺便说一句,我认为没有编写自定义渲染部分就没有解决方案。-1这根本不能解决这个问题。问题是如何更改局部视图,以使字段名称呈现为“Bar.a”与“Baz.a”,而不取决于您传递的对象来自何处…1。为什么在您的示例中FormView.Bar和FormView.Baz是字符串类型?2.你的建议行不通。我们将得到a=1&a=2。您可以将其更改为BarEditor而不是string。我在几乎所有的项目中都这样做,但我从来没有得到a=1&a=2。可能你在谈论一些类似的场景,比如:。但请注意,我指的是渲染部分。顺便说一句,我认为没有编写自定义渲染部分就没有解决方案。-1这根本不能解决这个问题。问题是如何更改局部视图,以便将字段名称呈现为“Bar.a”与“Baz.a”,这不取决于您传递的对象来自何处……是的,看起来这是一种方法。它也可以是自定义的RenderPartial实现。让我们把这个当做答案:-是的,看起来像这样的事情是一种方式。它也可以是自定义的RenderPartial实现。让我们把这个当作答案:- OP很清楚模型映射是如何工作的,这就是为什么他提出了一个解决他的问题的方法。你不能解决这个问题。-OP显然理解模型映射是如何工作的,这就是为什么他要求解决他的问题。你不能解决这个问题。