ASP.NET MVC Post方法:模型属性不会保留该值

问题描述

我有2个ASP.NET MVC动作方法,我通过传递并加载一些初始数据来调用一个方法,然后从UI中获得一些其他详细信息,然后从{调用第二个动作方法Post动作方法{1}})。 post方法中缺少我从第一个调用中收到的数据。有人可以帮我在这里做错什么吗?

操作方法

.cshtml

查看[Route("setprofile")] public ActionResult SetProfile(string id) { ProfileData data = new ProfileData(); //do something data.name= getData(id); return this.View(data); } [Route("setprofile")] [HttpPost] public ActionResult SetProfile(ProfileData data) { // Here I'm not missing the data.name field value } 文件

.cshtml

在这里获得注释值,但没有从模型中获取名称字段值。

注意:我需要将我从第一个操作方法接收到的值显示标签,而不是文本框。

解决方法

有两件事,名称写为文本,为了发送回服务器,您需要将其放在输入元素中。

如果您不想显示它,@Html.HiddenFor(m => m.name)将创建隐藏的输入元素。

除此之外,请检查ModelState是否存在验证错误。

if (!ModelState.IsValid)
     return BadRequest(ModelState);

.... your code here

如果您的模型无效,则ProfileData返回结果

,

您尚未添加.then元素,以便在提交表单时将其发送回服务器。如果您不希望看到它,同时又将其张贴回去,请为其添加一个隐藏字段:

var objHttp = require( 'http' )
var objFs   = require( 'fs' )

function promiseResolveCallback( arg )
{
    console.log("promiseResolveCallback(): ",arg)
}

function promiseRejectionCallback( arg )
{
    console.log("promiseRejectionCallback(): ",arg)
}

function writeToFileCallback()
{
    objFs.writeFile( 'new.js','content_to_be_written',( argError ) => 
                     { 
                        if( argError ) 
                            throw argError 
                        else 
                            console.log( "writeToFileCallback: Written in new.js!" ) 
                     } 
                   )
}

function readFromFileCallback()
{
    objFs.readFile( 'new.js',( argError,argData ) =>
                    {
                        if( argError )
                            console.log( "readFromFileCallback: " + argError )
                        else
                            console.log( "readFromFileCallback: " + argData )
                    }
                  )
}

function closeFileCallback()
{
    objFs.close( argFd,( argError ) => 
                 {
                    if( argError )
                        console.log("closeFileCallback: " + argError )
                    else
                        console.log( "closeFileCallback: Closed!" );
                 }
               )
}

function fileFunction()
{                        
     console.log("In fileFunction:")
     // open file
     let objPromise = new Promise( ( resolve,reject ) =>
                                   {
                                        objFs.open( 'new.js','r',argFD ) =>
                                                    {
                                                        if( argError )
                                                        {
                                                            reject( new Error("File not found!"),1000);
                                                        }
                                                        else
                                                        {
                                                            resolve("File found!",1000);
                                                        }
                                                    }
                                                  )
                                   }
                                 );
                            
     objPromise.then( promiseResolveCallback,promiseRejectionCallback )
               .then( writeToFileCallback )
               .then( readFromFileCallback )
               .then( closeFileCallback )
} 

fileFunction()

                   
                    
                  

没有这些,您要做的就是将input呈现到标记中,但是一旦提交表单,就不会将其发送回去。另外,您可以在设置值@Html.HiddenFor(m => m.name) 的同时呈现该值的文本框。这样一来,它就可以显示出来,而不被更改,仍然可以发送回服务器。

name