如何从电流控制器中获取价值?

Posted

技术标签:

【中文标题】如何从电流控制器中获取价值?【英文标题】:How get value from current controller? 【发布时间】:2021-12-10 16:05:39 【问题描述】:

如果我调用 POST 操作方法,我想从我的 GET 操作方法的文件对象中获取数据。

public class UploadController:Controller 

    public IActionResult Index()
        // Here is some code
        return View(files);
    

    [HttpPost]
    public IActionResult Index(IFormFile importFile)
    
        // Here I want to work with data from the files object of my Index() method above
        return View("Index", newFiles);
    


我的视图如下所示:

@using MVC-project.Models
@model UploadViewModel

<table>
    <tr>
        <th>File Name</th>
        <th></th>
    </tr>
    @foreach (string file in Model.FileName )
    
        <tr>
            <td>@file</td>
            <td>@html.ActionLink("Download", "DownloadFile", new  fileName = file )</td>
        </tr>
    
</table>



@using (Html.BeginForm("Index", "Upload", FormMethod.Post, new  @id = "upldFrm", @enctype = "multipart/form-data" ))

    <div class="row">
        <div class="form-group col-md-6">
            <input type="file" class=" form-control" name="importFile" />
        </div>
        <div class="form-group col-md-6">
            <input type="submit" name="filesubmit" value="Upload" />
        </div>
    </div>



// Here is some code and if-case for processing after the POST submit

如何在我的 POST Index 方法中使用来自我的 GET Index() 操作方法的 files 对象的数据?

【问题讨论】:

HTTP 是无状态的。每个请求都会有一个新的控制器实例。虽然这两个操作都可以调用相同的私有方法。 这能回答你的问题吗? Pass data between Actions in MVC @MiladDastanZand 是和否:D 如何在我的 Razor 代码中使用 keep 和 peek 来保留我的 ViewModel?也许在 razor 之外还有另一种方法可以保留和查看 ViewModel 【参考方案1】:

有很多方法可以做到这一点。您可以将文件放在 get 控制器中的视图数据字典中。

ViewData["Files"] = files

然后从您的帖子中检索它。

var files = ViewData["Files"] 

您还可以将文件传递到 get 控制器中的视图模型,将其发送到您的视图。然后在您在视图上提交表单时将其传递给 post 操作。

public class ViewModel 
     public string Files get; set;
     public IFormFile File get; set; 
 


[HttpGet]
public IActionResult Index()
    var viewModel = new ViewModel 
    
        Files = files
    ;
    return View(viewModel);
 

[HttpPost] 
public IActionResult Index(ViewModel viewModel)
.... 
 

【讨论】:

感谢您的回答。我尝试了您的解决方案,但 POST 操作中的 ViewModel 参数为空... :( @Christian01 你是如何在你的视图中绑定它的?请分享观点【参考方案2】:

这是在发布操作之前获取数据的示例。

public ActionResult Edit(int id)

  HttpResponseMessage response =GlobalVariables.webApiClient.GetAsync("Tbl_Books/"+ id.ToString()).Result;

  return View(response.Content.ReadAsAsync<Books>().Result);


[HttpPost]
public ActionResult Edit(Books newbook)


  HttpResponseMessage response =GlobalVariables.webApiClient.PostAsJsonAsync("Tbl_Books", newbook).Result;
            
  HttpResponseMessage response = 
  GlobalVariables.webApiClient.PutAsJsonAsync("Tbl_Books/" + newbook.BookId, newbook).Result;

  return RedirectToAction("Index");

在这里,我将从我的 get API 方法中获取数据,并将此数据传递给 post view[HttpPost],然后可以执行 post 或 put 操作。

【讨论】:

以上是关于如何从电流控制器中获取价值?的主要内容,如果未能解决你的问题,请参考以下文章

压控恒流源电路,电压如何控制电流

如何从 Zeppelin 中的控制台流接收器获取输出?

如何从 FlexForm 到 Controller 获取价值

如何在颤振中基于同一个流控制器获取多个流?

如何从我的模型中的剑道编辑器中获取价值

MOS管该如何精准控制电流?