Asp.net mvc 在同一视图中从一个模型向另一个模型返回值?

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

使用这里的一些答案,我最终使用了一个具有两个模型的元组来表示一个视图。为简单起见,tuple.Item1在视图中有一个已知的数字,我正在将tuple.Item2的信息提交给它的控制器。我想为特定成员tuple.Item2.num发回提交的tuple.Item2中tuple.Item1.num的值

目前,我在邮件提交中有以下内容:

@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