Asp.net mvc 在同一视图中从一个模型向另一个模型返回值?
使用这里的一些答案,我最终使用了一个具有两个模型的元组来表示一个视图。为简单起见,tuple.Item1在视图中有一个已知的数字,我正在将tuple.Item2的信息提交给它的控制器。我想为特定成员tuple.Item2.num发回提交的tuple.Item2中tuple.Item1.num的值 目前,我在邮件提交中有以下内容:Asp.net mvc 在同一视图中从一个模型向另一个模型返回值?,asp.net-mvc,asp.net-web-api,Asp.net Mvc,Asp.net Web Api,使用这里的一些答案,我最终使用了一个具有两个模型的元组来表示一个视图。为简单起见,tuple.Item1在视图中有一个已知的数字,我正在将tuple.Item2的信息提交给它的控制器。我想为特定成员tuple.Item2.num发回提交的tuple.Item2中tuple.Item1.num的值 目前,我在邮件提交中有以下内容: @using (Html.BeginForm(null, null, FormMethod.Post, new { id = "createMessage", @act
@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "createMessage", @action = "/api/Message" }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
@Html.Hidden("ID", @Model.Item2.ID)
<div class="editor-field">
@Html.TextArea("Text", @Model.Item2.Text)
@Html.ValidationMessageFor(tuple => tuple.Item2.Text)<br />
</div>
<input type="submit" value="Post Discussion" />
}
Message.cs
namespace Project.Models
{
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Web;
using FileHelpers;
[Table("MESSAGE")]
public class Message
{
private int id;
private int shortageID;
private string ndc;
private string user;
private DateTime date;
private string text;
[Key]
[Column("ID")]
public int ID
{
get
{
return this.id;
}
set
{
this.id = value;
}
}
[Column("SHORTAGE_ID")]
public int ShortageID
{
get
{
return this.shortageID;
}
set
{
this.shortageID = value;
}
}
[Column("NDC")]
public string NDC
{
get
{
return this.ndc;
}
set
{
this.ndc = value;
}
}
[Column("USER")]
public string User
{
get
{
return this.user;
}
set
{
this.user = value;
}
}
[Column("DATE")]
public DateTime Date
{
get
{
return this.date;
}
set
{
this.date = value;
}
}
[Column("TEXT")]
public string Text
{
get
{
return this.text;
}
set
{
this.text = value;
}
}
}
}
您可以在ajax中尝试这种方法
@using (Ajax.BeginForm("ActionOfItem2", "ControllerOfItem2", new AjaxOptions { UpdateTargetId = "UpdateDiv"}))
{
@Html.Hidden("ID", @Model.Item2.ID)
<input type="submit" value="Post Discussion" />
}
使用视图模型
我建议使用ViewModel,而不是使用元组。ViewModel只是一个简单的类,您可以专门创建它来满足视图的要求
ViewModel是Asp Mvc标准,您不能仅为视图修改模型,而是创建ViewModels
您可以这样设置视图模型
// You typically name your ViewModel to the View
// that it represents.
public class MessageSubmission
{
public Message Message { get; set; }
public DrugEntry DrugEntry { get; set; }
}
ViewModels应存储在其自己的文件夹中。创建一个名为ViewModels的文件夹,并将其存储在那里。下面是Microsoft创建的应用程序的文件夹结构,请注意ViewModels文件夹
看法
由于您使用的是弱类型的html扩展,因此我建议如下
@model MyMvcApplication1.ViewModels.MessageSubmission
@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "createMessage", @action = "/api/Message" }))
{
@Html.ValidationSummary(true)
@Html.Hidden("ID", @Model.Message.ID)
<!-- // You can assign the DrugEntry.NDC, to a Message.NDC like this -->
@Html.Hidden("NDC", @Model.DrugEntry.NDC)
<div class="editor-field">
@Html.TextArea("Text", @Model.Message.Text)
@Html.ValidationMessageFor(model => model.Message.Text)<br />
</div>
<input type="submit" value="Post Discussion" />
}
MVC默认模型活页夹自动将视图页面(ID、NDC、文本)中的值分配给控制器中的等待模型(Message.ID、Message.NDC、Message.Text)
活页夹通过比较html控件的ID和模型的属性来对齐字段
View | Model Properties
------------------------------
Hidden.ID | Message.ID
Hidden.NDC | Message.NDC
TextArea.Text | Message.Text
我可能能够提供一个更像MVC的解决方案,但首先我需要查看两个模型的代码,你能提供吗?@Yorro:我添加了模型,让我知道有什么可能性。我正在将Message.text的输入文本发送回其控制器,并希望同时发送DrugEntry.NDC。
@model MyMvcApplication1.ViewModels.MessageSubmission
@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "createMessage", @action = "/api/Message" }))
{
@Html.ValidationSummary(true)
@Html.Hidden("ID", @Model.Message.ID)
<!-- // You can assign the DrugEntry.NDC, to a Message.NDC like this -->
@Html.Hidden("NDC", @Model.DrugEntry.NDC)
<div class="editor-field">
@Html.TextArea("Text", @Model.Message.Text)
@Html.ValidationMessageFor(model => model.Message.Text)<br />
</div>
<input type="submit" value="Post Discussion" />
}
[HttpPost]
public ActionResult Message(Message message)
{
// Add your stuff here.
}
View | Model Properties
------------------------------
Hidden.ID | Message.ID
Hidden.NDC | Message.NDC
TextArea.Text | Message.Text